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?

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.


+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" user@domain.com

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


1

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


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.


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


-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 &


Ini sepertinya bukan jawaban untuk pertanyaan itu.
— Ljm Dullaart
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.