Puse un script ejecutable /etc/cron.hourly
, pero ese script no se ejecutó cada hora, en realidad nunca se ejecuta.
Aquí está el guión (Hour-sound) que hice:
#! / bin / bash mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null & spd-say -r -50 -p 50 -t male3 "El tiempo ahora es $ (fecha +"% l% p ")" notificar-enviar "Es:" "$ (fecha +"% l% p ") ahora". -i ~ / Imágenes / "first tee.png" -t 5000
Mi crontab es:
DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /home/naruto/Hour-sound.sh
Mientras que los comandos mplayer
y spd-say
se ejecutan correctamente, notify-send
no lo es. También intenté redirigir el error a un archivo:
0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
Pero eso no mostró salida. ¿Qué estoy haciendo mal?
/etc/crontab
Tiene larun-parts
línea para ejecutarcron
trabajos por hora desde el directorio?/etc/crontab
archivo tiene la línea17 * * * * root cd / && run-parts --report /etc/cron.hourly
?Respuestas:
Como probablemente haya visto en los comentarios a su pregunta, los cronjobs en
/etc/cron.hourly
(y los otros directorios similares) son ejecutados porrun-parts
.run-parts
es un poco exigente con los nombres de archivos. Por defecto, no ejecuta archivos cuyos nombres de archivo contengan algo que no sea (todos los de ASCII)Entonces, si su script tiene un nombre de archivo de, por ejemplo, "myscript.sh", simplemente se ignora, porque
run-parts
no le gusta el punto.fuente
/etc/cron.hourly
no se ejecutan necesariamente "a la hora"? Si su cronjob/etc/crontab
tiene 17 en la posición de minutos, los scripts se ejecutan a las 00:17, 01:17 y así sucesivamente. ¿Y de nuevo por si acaso, los permisos del script permiten al usuario root ejecutarlos?/etc/cron.d/
no deben tener permisos de escritura o ejecución para "grupo" u "otros". "propietario" necesita permiso de ejecución, "grupo" y "otros" solo deben tener permiso de lectura. Tal vez eso también se aplica/etc/cron.hourly
, aunque no lo probé.Un problema es que está intentando ejecutar una aplicación gráfica (
notify-send
) desde cron. Eso requiere un pequeño ajuste. Debe configurarXAUTHORITY
yDISPLAY
variables en el crontab para que pueda conectarse a su sesión X en ejecución y debe configurarXDG_RUNTIME_DIR
para que pueda conectarse a su sesión de pulseaudio. Desafortunadamente, estos deben configurarse en el crontab en sí mismo, por lo que no puede usarlos/etc/cron.hourly
. En su lugar, ejecutecrontab -e
y agregue estas líneas:Cambie el valor de
XDG_RUNTIME_DIR
lo que sea que se devuelva cuando losecho
envíe desde un terminal. En mi sistema, esto es:Probablemente será lo mismo en la suya, pero verifique primero. Ahora, su script se ejecutará cada hora y debería funcionar como se espera.
fuente
notify-send
necesita que se establezcan las variablesXAUTHORITY
yDISPLAY
, y ii)mplayer
necesitaXDG_RUNTIME_DIR
que se configuren. ¿Probaste mi sugerencia? Eso debería solucionar ambos problemas. Probablemente también tuvo problemas de nombres debido arun-parts
lo explicado en la otra respuesta./etc/crontab
, no hagas eso. Desea que esto se ejecute como su usuario, no como root, y ese archivo tiene un formato diferente de todos modos. Simplemente haga lo que dije en mi respuesta, corracrontab -e
y agregue las líneas allí.Un script que termina con
.sh
no se ejecuta en la/etc/cron.hourly
carpeta:renombrar el guión
o poner la secuencia de comandos en
que permite el
.sh
finalfuente
No use script con extensión (abc.sh) y agregue su lugar de necesidad. (horas cron.)
agregue su código al archivo abc y guárdelo. (para su necesidad) (este debería ser el comando bash)
utilizar
comando para hacer un archivo ejecutable.
tiene unas pocas líneas predefinidas. edite de su línea de minutos a horas y guárdelo.
entonces se ejecutará correctamente.
fuente