Menjalankan perintah saat startup di crontab

24

Saya ingin menjalankan perintah di linux kami setelah reboot, saya melihat bahwa itu bisa dilakukan menggunakan crontab. Saya ingin menjalankan perintah ini

sudo ifdown eth0 && sudo ifup -v eth0

pada crontab dapat saya lakukan:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

atau apakah saya perlu menyimpannya dalam skrip?

Terima kasih

Lottie
sumber
7
Crontab sepertinya alat yang salah untuk memulai kembali eth0. Mengapa tidak meletakkan perintah itu (tanpa sudo) di /etc/rc.local?
mikewh Apapun
Untuk apa Anda melakukan ini? Tugas-tugas ini biasanya dilakukan secara otomatis selama proses boot, dan hampir TIDAK PERNAH perlu dijalankan secara terpisah dari proses boot otomatis ...
Thomas Ward
1
@mikewhthing saya tidak bisa mengungguli saat ini tetapi hanya ingin mengucapkan terima kasih untuk menyarankan itu.
Lottie

Jawaban:

34

Beberapa catatan di sini sebelum ini berfungsi:

  1. Jangan gunakan sudodalam pekerjaan cron. Alih-alih edit rootcrontab alih-alih milik Anda, mis. sudo crontab -eLalu masukkan perintah tanpa sudo.
  2. Seperti @mikewhthing disebutkan, ini adalah penggunaan yang aneh cron, dan kemungkinan akan lebih baik ditempatkan /etc/rc.localsebelum exit 0baris.
  3. Jika Anda memberi tahu kami apa yang Anda cari, kami mungkin dapat mengarahkan Anda ke opsi log atau konfigurasi (memulai ulang layanan jaringan Anda saat startup terasa sedikit meretas).
  4. Pada kebanyakan sistem @rebootjuga harus berjalan setelah hard shutdown atau crash, tetapi ada implementasi cron yang berbeda sehingga YMMV. Saya telah melihat komentar di berbagai tempat yang menyatakan keduanya.

EDIT (2016/02/17): Hapus uraian salah pada jalur absolut; kudos @muru
EDIT (2016/10/17): Menambahkan shutdown note
EDIT (2017/09/11): Revisi shutdown note. Tidak begitu yakin tentang itu.

TheSchwa
sumber
ok hanya ingin mengklarifikasi, saya hanya harus menulis perintah penuh etc/rc.localtanpa sudo. demikian maka itu akan menjadi hanya ifdown eth0 && sudo ifup -v eth0 exit 0
Lottie
cronmenggunakan yang PATHdiberikan /etc/environment, yang memang memiliki /sbin.
muru
Saya melakukan apa yang disarankan @mikewhthing dan berhasil. terima kasih
Lottie
1
@TheSchwa seharusnya. Setidaknya sejak 12,04, /etc/pam.d/cronmemuat pam_env, jadi /etc/environmentharus dibaca dan PATHset default digunakan. Jawaban itu diposting sebelum 12,04 keluar.
muru
2
@TheSchwa Pernyataan bahwa reboot cron tidak berjalan pada boot dingin adalah salah. Baris dengan menjalankan reboot ketika daemon crond dimulai, titik. Entah itu boot hangat, boot dingin, atau tidak ada boot dan saya hanya mematikan crond secara manual dan memulainya lagi. Daemon crond tidak tahu atau tidak peduli mengapa itu direstart, itu hanya akan menjalankan garis reboot setiap kali itu.
Kurt Fitzner
6

Anda dapat menggunakan crontab untuk ini, tetapi jika Anda menggunakan sudo, maka Anda perlu NOPASSWDaturan sudoersuntuk melakukannya. (Lihat Bagaimana menjalankan tugas cron menggunakan perintah sudo .)

Akan lebih mudah untuk mengedit /etc/rc.localdan menambahkan perintah-perintah ini sebelum exit 0baris.

muru
sumber