Solución:
Una cosa a la vez:
Primero, démosle una carpeta bin basada en el usuario:
cd ~/ && mkdir bin
Quieres usar crontab. Comencemos con algo realmente simple:
* * * * * touch /tmp/testing.txt
Está bien, eso funciona
Ahora intentemos ejecutar un script que haga lo mismo
* * * * * /home/username/bin/touchtest.sh
para correr una vez por minuto hasta que funcione
No, no necesitas un ./ en el medio de la línea. ./ es para cuando está dando URL relativas.
Está bien, eso funciona
Ahora intentemos ejecutar un script que llame a xmessage
* * * * * /home/username/bin/rebootwarn.sh
no funciona
Primero, necesitamos no depender de las variables del entorno. Esto incluye la configuración de la ruta, la configuración x11 o cualquier otra cosa (me vienen a la mente las variables de entorno python y ruby …)
Hagamos que el nuestro se parezca un poco al archivo cron adecuado de anacron. Lo guardé como prueba
#Borrowed from anacron
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#End borrowed from anacron
* * * * * /bin/bash /home/username/bin/test.sh
Configurar para que se ejecute una vez por minuto
crontab test
para importarlo
En el guión
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"`
Bien, eso funciona … ¿qué hicimos?
Cambiamos todos los comandos para que no dependan de rutas que no establecimos explícitamente
Ejecutamos nuestro script explícitamente con bash
Le dijimos al script que esperamos estar en DISPLAY: 0.0
El problema se solucionó lea el manual en Google:
descripción:
- Tengo un script usando
#!/bin/bash
como encabezado - Puse el guion en
/home/wc3/palert/
análisis:
- crontab no puede ejecutar mi script
- Pero si ejecuto manualmente, muestra la salida y también puedo ver el resultado en mi web
- Significa que crontab no puede obtener el entorno que no es como cuando ejecuta su secuencia de comandos en su carpeta de secuencias de comandos
respuesta:
-
ponga su entorno usando esta línea a continuación en su script con:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/wc3/palert
cambia esto:
/home/wc3/palert
con: el lugar en el que pones tu guión, p. ej.
/home/budi/script.sh
muestra:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi
# Script continues...
Intente poner su secuencia de comandos en crontab.