Bagaimana cara mengeksekusi skrip shell melalui crontab?

22

Saya memiliki notify.shskrip yang terlihat seperti:

notify-send "hi welcome"

Notifikasi crontab saya selama 2 siang:

0 14 * * * home/hacks/notify.sh

Namun, ini tidak berhasil. Apa masalahnya?

Aravind
sumber

Jawaban:

39

Skrip Anda tidak memiliki #! baris di awal, yang merupakan keajaiban yang ditafsirkan oleh kernel untuk mengatakan interpreter perintah mana yang akan digunakan untuk skrip.

Jadikan seperti ini:

#!/bin/sh
notify-send "hi welcome"

dan pastikan skrip dapat dieksekusi:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

Juga, karena Anda meminta hal ini terjadi sekali sehari, apakah zona waktu crontab sama dengan zona waktu Anda sendiri? Anda mungkin menemukan ini terjadi pada pukul 14:00 GMT.

Phil P
sumber
+1 Jawaban ini luar biasa - terutama mengingat bahwa skrip perlu dieksekusi! Terima kasih!
FXQuantTrader
Penjelasan yang sangat halus.
Suara positif
18

Membuat crontab berjalan mudah saja. Di sini saya akan mengatakan bagaimana menjalankan pekerjaan crontab. Ini berguna untuk siapa saja yang terjebak di crontab.

*/1 * * * * cd /home/hacks && sh notify.sh

Untuk membuat skrip dapat dieksekusi, kita harus melakukan:

chmod +x home/hacks/notify.sh

Di sini saya menjalankan skrip ini untuk setiap satu menit ... Dengan melakukan skrip di bawah ini, Anda dapat menulisnya dalam file log untuk mengetahui apakah itu berfungsi

menulis log

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

kirim email

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
Aravind
sumber
2
bukankah "* / 1 * * * * sh /home/hacks/notify.sh" juga akan berfungsi?
user1179459
5

4 hipotesis:

  • daemon cron tidak berjalan (lakukan a ps axfww | grep crondan periksa)

  • notify-send mencoba mengirim output ke terminal, atau sesi X - tetapi dijalankan dari dalam cronlingkungan dan tidak tahu "siapa yang harus diajak bicara", jadi untuk berbicara.

  • skrip Anda tidak dapat dieksekusi

  • yang home/jalan dalam naskah crontab adalah relatif terhadap pengguna script dijalankan sebagai. Coba gunakan path lengkap

lorenzog
sumber
1

Tambahkan di export DISPLAY=:0atas baris notify-send di skrip Anda. Ini membahas poin kedua lornezog.

W_Whalley
sumber
0

Anda harus membuka crontab dengan perintah berikut:

crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh

Ini akan menjalankan skrip Anda satu jam sekali dari jam 8 pagi - 3 sore di jam 10 menit melewati jam setiap hari Senin, Rabu dan Jumat.

Taji
sumber
0

Pertama-tama, kita perlu mengedit crontab dengan Command crontab -edan daripada Di dalam ini Crontabtambahkan script Path of Executable dan dalam Kasus Anda seperti ini * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Mulai / Berhenti / mulai ulang layanan cron

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl stop crond.service

kunal
sumber
-2

cukup sederhana, tambahkan baris berikut di bagian bawah file crontab melalui: sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &

Martini7
sumber
Ini sepertinya bukan jawaban untuk pertanyaan itu.
Ljm Dullaart