¿Cómo ejecutar el script de shell a través de crontab?

22

Tengo un notify.shscript que se parece a:

notify-send "hi welcome"

Mi notificación crontab para las 2 PM:

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

Sin embargo, esto no funciona. ¿Cuál es el problema?

Aravind
fuente

Respuestas:

39

¡A tu script le falta un #! línea al comienzo, que es la magia interpretada por el núcleo para decir qué intérprete de comandos se utilizará para el script.

Haz que se vea así:

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

y asegúrese de que el script sea ejecutable:

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

Además, dado que está solicitando que esto suceda solo una vez al día, ¿la zona horaria del crontab es la misma que su propia zona horaria? Es posible que esto ocurra a las 2 p.m. GMT.

Phil P
fuente
+1 Esta respuesta es asombrosa, ¡especialmente teniendo en cuenta que el guión debe ser ejecutable! ¡Gracias!
FXQuantTrader
Muy sutil explicación. Mi
voto a favor
18

Hacer que crontab se ejecute solo es fácil. Aquí voy a decir cómo ejecutar trabajos crontab. Es útil para cualquiera que esté atascado en crontab.

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

Para hacer que el script sea ejecutable, tenemos que hacer:

chmod +x home/hacks/notify.sh

Aquí ejecuto este script por cada minuto ... Al hacer el siguiente script, puede escribirlo en un archivo de registro para saber si funciona

escribir registro

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

enviar correo

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
Aravind
fuente
2
¿No es que "* / 1 * * * * sh /home/hacks/notify.sh" también funcionará?
user1179459
5

4 hipótesis:

  • el cron daemon no se está ejecutando (hacer ps axfww | grep crony verificar)

  • el envío de notificaciones está intentando enviar la salida a un terminal o una sesión X, pero se ejecuta desde el cronentorno y no sabe "con quién hablar", por así decirlo.

  • tu script no es ejecutable

  • la home/ruta en el script crontab es relativa al usuario en el que se ejecutan los scripts. Intenta usar la ruta completa

lorenzog
fuente
1

Agregue export DISPLAY=:0arriba de la línea de notificación de envío en su secuencia de comandos. Esto aborda el segundo punto de lornezog.

W_Whalley
fuente
0

Tienes que abrir crontab con el siguiente comando:

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

Esto ejecutará su script una vez por hora de 8 a.m. a 3 p.m. a las 10 minutos de la hora todos los lunes, miércoles y viernes.

Garfio
fuente
0

En primer lugar, necesitamos editar el crontab con Command crontab -ey luego, dentro de esto, Crontabagregar la ruta de acceso del script ejecutable y en su caso de esta manera * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Iniciar / detener / reiniciar el servicio cron

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

systemctl stop crond.service

kunal
fuente
-2

bastante simple, agregue la siguiente línea en la parte inferior del archivo crontab a través de: sudo nano /etc/crontab

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

Martini7
fuente
Esto no parece ser una respuesta a la pregunta.
Ljm Dullaart