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 di mesin reboot. (Ini berjalan dengan baik jika saya memintanya dari baris perintah, jadi itu bukan masalah izin)
Apa yang saya lewatkan?
Pembaruan untuk menjawab pertanyaan @ Anthon:
- Versi Oracle-linux: 5.8 (tidak sama: 2.6.32-300.39.2.el5uek # 1 SMP)
- Versi Cron: vixie-cron-4.1-81.el5.x86_64
- Ya,
/home
adalah partisi yang dipasang. Sepertinya ini masalahnya. Bagaimana saya mengatasinya? - Saat ini,
myscript.sh
hanya gema pesan teks ke file di/home/me
.
/home
partisi yang dipasang? Apa isinya/home/me/myscript.sh
?@reboot
. oss.oracle.com/pipermail/el-errata/2012-March/002655.htmlmyscript.sh
dieksekusi?chmod +x myscript.sh
.Jawaban:
Ini bisa menjadi topik yang membingungkan karena ada implementasi cron yang berbeda. Juga ada beberapa bug yang merusak fitur ini, dan ada juga beberapa kasus penggunaan di mana itu tidak akan berfungsi, khususnya jika Anda melakukan shutdown / boot vs reboot.
Bug
datapoint # 1
Salah satu bug di Debian dibahas di sini, berjudul: cron: @reboot jobs tidak dijalankan . Ini sepertinya telah masuk ke Ubuntu juga, yang saya tidak dapat konfirmasi secara langsung.
datapoint # 2
Bukti bug di Ubuntu tampaknya akan dikonfirmasi di sini dalam SO T&J ini berjudul: @reboot cronjob tidak dijalankan .
kutipan
Jawaban yang diterima dalam Tanya Jawab itu juga memiliki komentar ini:
Bukti tambahan
datapoint # 3
Sebagai bukti tambahan ada utas ini bahwa seseorang mencoba hal yang sama dan merasa frustrasi karena tidak berhasil. Judulnya: Thread: Cron - @reboot jobs tidak berfungsi .
kutipan
Setelah pengguna di atas menemukan masalahnya, ia bisa mulai
@reboot
mengerjakan entri crontab pengguna.Saya tidak sepenuhnya yakin versi cron apa yang digunakan di Ubuntu, tetapi ini sepertinya mengindikasikan bahwa pengguna juga dapat menggunakannya
@reboot
, atau bahwa bug diperbaiki pada beberapa titik di versi cron berikutnya.datapoint # 4
Saya menguji pada CentOS 6 berikut ini dan itu berhasil.
Contoh
Saya kemudian reboot sistem.
Setelah reboot.
Awasi
Untuk lebih lanjut tentang bagaimana mekanisme yang sebenarnya bekerja untuk
@reboot
saya menemukan posting blog ini yang membahas jeroan. Judulnya : @reboot - menjelaskan sihir cron sederhana .Debugging crond
Anda dapat mengubah verbositas
crond
dengan menambahkan yang berikut ini ke file konfigurasi ini di distro berbasis RHEL / CentOS / Fedora.Level yang valid adalah 0, 1, atau 2. Untuk mengembalikan file ini kembali ke level logging standarnya, cukup hapus
"-L 2"
ketika Anda selesai men-debug situasi.sumber
@reboot
OK di crons tertentu, dan tampaknya buggy / rusak pada yang lain. Karena itu kebingungan.@reboot
berfungsi setelah Anda menyadari sedang mencoba mengakses drive yang dienkripsi, yang belum dipasang pada saat itu.@reboot sleep 60; <your command>
. Mengutip utas, "tebakan saya adalah bahwa arahan @reboot cron berjalan terlalu dini dalam proses boot"Saya mengetahui bahwa pada mesin Ubuntu saya, saya belum memiliki akses ke layanan dns, pada waktu @reboot. Ini mencegah saya memasang volume jarak jauh. Solusi klise ini, namun sederhana, bekerja:
@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log
(di root cron; bagian terakhir hanya untuk debugging)
sumber
Saya memiliki mac osx juga dan saya memiliki masalah yang sama di mana skrip saya tidak berjalan. tetapi ketika saya memperbaiki skrip saya suka
ini bekerja dengan baik untukku. pastikan untuk membuat file shell Anda dapat dieksekusi dengan menjalankan perintah
sumber
Saya tidak tahu apakah Anda sudah menyelesaikan ini, atau apakah salah satu di atas adalah solusi yang Anda butuhkan, tetapi kemungkinan lain adalah:
jika Anda memiliki direktori / home Anda terenkripsi, itu mungkin tidak tersedia sampai Anda masuk, artinya tidak tersedia saat reboot.
dalam skenario ini, Anda dapat memindahkan skrip Anda ke lokasi lain seperti / srv atau / opt atau / usr / local / bin / dll.
sumber
Lakukan instalasi baru Ubuntu Gnome 13.10 (pengguna default dalam kasus saya: avanderneut).
Dan lihat bahwa setelah reboot file
/var/tmp/xxx
ada di sana walaupun tidak ada sebelum reboot.Ini dilakukan dengan cron versi 3.0.
Anda harus memastikan bahwa tidak ada disk layanan dll yang digunakan yang mungkin tidak tersedia pada saat skrip berjalan. Mulailah dengan sesuatu yang sederhana seperti di atas dan pastikan tidak memiliki keluaran terminal karena email mungkin tidak aktif dan berjalan.
Anda mungkin juga membutuhkan cron yang lebih baru (atau upgrade dari oracle-linux) jika ini tidak berhasil untuk Anda dan Anda memerlukan fitur ini.
sumber
/dev/mapper/VolGroup00-LogVol01
partisi yang dapat dipasang .cron
. Anda harus IMHO mengambil rute yang berbeda dari crontab & @reboot untuk menjalankan sesuatu sekali saat startup sebagai pengguna.Saya akan menjawab ya untuk pertanyaan itu. Baru saja mengalami kesulitan dengan menjalankan cron di reboot (Debian 3.10.70) dan berhasil diselesaikan dengan:
@reboot root /usr/bin/python3 /path/to/script
Dan karakter baris baru '\ n' pada akhirnya
Ini adalah isi file:
Akhirnya, saya pikir perlu dicatat abstrak dari
man 5 crontab
sumber
Pertama-tama, Anda harus login sebagai root:
Kemudian buka crontab:
Setelah itu, tambahkan skrip Anda ke crontab sebagai root seperti di bawah ini:
Akibatnya saya melihat bahwa skrip saya berfungsi dengan baik.
Catatan: Jika Anda mengedit crontab dengan pengguna Anda saat ini, reboot tidak dapat memanggil skrip Anda dengan benar.
sumber
prueba:
usuario @ ubuntu: ~ $ touch script.sh usuario @ ubuntu: ~ $ chmod + x script.sh
usuario @ ubuntu: ~ $ $ crontrab -e
@reboot /home/usuario/script.sh
simpan dan mulai ulang pc Anda
sumber