Saya punya masalah menjalankan skrip dari crontab. Setelah beberapa penelitian saya mengerti masalahnya adalah karena parameter PATH tidak termasuk / sbin.
Saya melihat apa yang ada di / etc / crontab:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
Sebagai tes - tugas cron sederhana untuk mencetak variabel PATH:
* * * * * echo $PATH &> /root/TMP.log
outputnya adalah:
cat /root/TMP.log
/usr/bin:/bin
Saya tidak mengerti perilaku ini ... Bagaimana saya mengatur variabel PATH ..? Atau lebih baik - bagaimana cara menambahkan path ke sana?
bash -lc
tidak membantu. Saya baik untuk saat ini dengan mengatur PATH secara manual, tetapi jika saya menginstal beberapa skrip, saya ingin mereka dikenali di cronjobs tanpa menentukan path lengkap. Saya yakin itu mungkin, entah bagaimana, danbash -lc
sedang menuju solusi :)Jika Anda memerlukan PATH lebar sistem default dan variabel ENV lainnya (yang didefinisikan dalam /etc/profile.d), cukup cantumkan yang berikut:
sumber
Dimungkinkan untuk mengatur PATH (atau parameter lainnya) di baris cronjob atau pada satu baris. Tetapi Anda tidak dapat menggunakan ekspansi shell seperti
PATH=$PATH:/usr/local/bin
. Tetapi tilde diizinkan untuk pintasan direktori home.Dari buku-buku:
Lihat
man 5 crontab
untuk informasi lebih lanjut.Jadi ini seharusnya bekerja:
sumber
Saya memiliki masalah yang sama dan saya menemukan cara lain untuk menjalankan skrip saya di crontab. Saya pikir cara termudah untuk menjalankan program Anda adalah dengan membuat skrip yang dapat di- cd ke direktori program Anda. Kemudian panggil program Anda dalam skrip itu.
ini adalah contoh skrip (skrip name = launcher.sh):
lalu, buat skrip Anda dapat dieksekusi:
Dan akhirnya, tambahkan skrip Anda ke crontab
dan tambahkan baris ini di akhir:
(Saya mengatur program untuk dijalankan pada setiap reboot)
sumber