man 5 crontab
cukup jelas tentang cara menggunakan crontab untuk menjalankan skrip saat boot:
These special time specification "nicknames" are supported, which replace the 5 initial time and date
fields, and are prefixed by the `@` character:
@reboot : Run once after reboot.
Jadi saya dengan senang hati menambahkan satu baris ke crontab saya (di bawah akun pengguna saya, bukan root):
@reboot /home/me/myscript.sh
Tetapi untuk beberapa alasan, myscript.sh tidak akan berjalan saat mesin di-boot ulang.
(berjalan dengan baik jika saya memanggilnya dari baris perintah, jadi ini bukan masalah izin)
Apa yang saya lewatkan?
Update untuk menjawab pertanyaan @Anthon:
- Versi Oracle-linux:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
- Versi cron:vixie-cron-4.1-81.el5.x86_64
- Ya,
/home
adalah partisi yang terpasang. Sepertinya ini masalahnya. Bagaimana cara mengatasinya? - Saat ini,
myscript.sh
hanya menggemakan pesan teks ke file di/home/me
.
Jawaban yang Diterima:
Ini bisa menjadi topik yang sedikit membingungkan karena ada implementasi yang berbeda dari cron. Juga ada beberapa bug yang merusak fitur ini, dan ada juga beberapa kasus penggunaan yang tidak berfungsi, khususnya jika Anda melakukan shutdown/boot vs. reboot.
Bug
titik data #1
Salah satu bug tersebut di Debian dibahas di sini, berjudul:cron:@reboot jobs is not run. Ini sepertinya telah berhasil masuk ke Ubuntu juga, yang tidak dapat saya konfirmasikan secara langsung.
titik data #2
Bukti bug di Ubuntu tampaknya akan dikonfirmasi di sini di SO Q&A berjudul:@reboot cronjob not execution.
kutipan
komentar #1:…. 3) versi crond Anda mungkin tidak mendukung @reboot apakah Anda menggunakan crond vix? … tampilkan hasil crontab -l -u user
komentar #2:… Mungkin ide yang baik untuk mengaturnya sebagai skrip init daripada mengandalkan versi tertentu dari @reboot cron.
komentar #3:… @MarkRoberts menghapus reboot dan memodifikasi 1 * * * * , menjadi */1 * * * * , masalah terpecahkan! Di mana saya mengirim perwakilan pts Mark? Terima kasih!
Jawaban yang diterima dalam T&J itu juga memiliki komentar ini:
Sepertinya saya Lubuntu tidak mendukung sintaks @Reboot Cron.
Bukti tambahan
titik data #3
Sebagai bukti tambahan, ada utas ini bahwa seseorang mencoba hal yang sama dan menjadi frustrasi karena tidak berhasil. Judulnya:Thread:Cron – @reboot jobs not working.
kutipan
Re:Cron – pekerjaan @reboot tidak berfungsi
Quote Awalnya Dikirim oleh ceallred View Post
Ini membunuh saya… Mencoba skrip pembungkus. Menjalankan secara manual menghasilkan file log… me-reboot dan pekerjaan tidak berjalan atau membuat file log.Syslog menunjukkan bahwa CRON menjalankan pekerjaan… tetapi sekali lagi, tidak ada output dan proses tidak berjalan.
15 Jul 20:07:45 RavenWing cron[1026]:(CRON) INFO (Menjalankan @reboot pekerjaan)
15 Jul 20:07:45 RavenWing CRON[1053]:(ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1 &)Sepertinya cron tidak menyukai perintah @reboot…. Ada ide lain?
Oke ... Sebagian terpecahkan. Saya akan menandai yang ini sebagai terpecahkan dan memulai utas baru dengan masalah baru…..
Saya pikir jawabannya adalah direktori home terenkripsi saya tidak dipasang ketika CRON mencoba menjalankan skrip (disimpan di /home/username/scripts). Dipindahkan ke /usr/scripts dan pekerjaan berjalan seperti yang diharapkan.
Jadi sekarang tampaknya menjadi masalah spideroak. Proses dimulai, tetapi pada saat proses boot selesai, itu hilang. Saya menduga crash untuk beberapa alasan .... Utas baru untuk menanyakan hal itu.
Terima kasih atas semua bantuannya!
Setelah pengguna di atas menemukan masalahnya, dia bisa mendapatkan @reboot
mengerjakan entri crontab pengguna.
Saya tidak sepenuhnya yakin versi cron apa yang digunakan di Ubuntu, tetapi ini tampaknya menunjukkan bahwa pengguna dapat menggunakan @reboot
juga, atau bahwa bug telah diperbaiki di beberapa titik di versi cron berikutnya.
titik data #4
Saya menguji pada CentOS 6 berikut ini dan berhasil.
Contoh
$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1
Saya kemudian me-reboot sistem.
$ sudo reboot
Setelah reboot.
$ cat reboot.txt
hi
Bawa pulang
- Fitur ini tampaknya didukung untuk entri crontab sistem dan pengguna.
- Anda harus memastikan bahwa itu didukung/berfungsi di distro dan/atau versi paket cron Anda.
Untuk mengetahui lebih lanjut tentang bagaimana mekanisme sebenarnya bekerja untuk @reboot
Saya memang menemukan posting blog ini yang membahas jeroan. Judulnya:@reboot – menjelaskan keajaiban cron sederhana.
Men-debug crond
Anda dapat meningkatkan verbositas crond
dengan menambahkan yang berikut ini ke file konfigurasi ini di distro berbasis RHEL/CentOS/Fedora.
$ more crond
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-L 2"
Level yang valid adalah 0, 1, atau 2. Untuk mengembalikan file ini ke level logging default, cukup hapus "-L 2"
setelah Anda selesai men-debug situasi.