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 mplayery spd-sayse ejecutan correctamente, notify-sendno 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/crontabTiene larun-partslínea para ejecutarcrontrabajos por hora desde el directorio?/etc/crontabarchivo 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-partses 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-partsno le gusta el punto.fuente
/etc/cron.hourlyno se ejecutan necesariamente "a la hora"? Si su cronjob/etc/crontabtiene 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 configurarXAUTHORITYyDISPLAYvariables en el crontab para que pueda conectarse a su sesión X en ejecución y debe configurarXDG_RUNTIME_DIRpara 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 -ey agregue estas líneas:Cambie el valor de
XDG_RUNTIME_DIRlo que sea que se devuelva cuando losechoenví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-sendnecesita que se establezcan las variablesXAUTHORITYyDISPLAY, y ii)mplayernecesitaXDG_RUNTIME_DIRque se configuren. ¿Probaste mi sugerencia? Eso debería solucionar ambos problemas. Probablemente también tuvo problemas de nombres debido arun-partslo 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 -ey agregue las líneas allí.Un script que termina con
.shno se ejecuta en la/etc/cron.hourlycarpeta:renombrar el guión
o poner la secuencia de comandos en
que permite el
.shfinalfuente
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