Tengo una secuencia de comandos que me recuerda reiniciar mi computadora si uptime
es más de 3 días (aunque ahora está configurada en 0 días solo para verificar si la secuencia de comandos se está ejecutando ya que mi computadora ha estado activa solo durante un día ...).
¡Me doy cuenta de que no es el guión más elegante, pero lo estoy intentando! :)
#!/bin/bash
up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"
Lo hice ejecutable chmod + x checkup.sh
y funciona bien cuando lo ejecuto desde el terminal a través de./checkup.sh
Mi entrada crontab para este script es:
46 14 * * * /home/username/Desktop/./checkup.sh
Entonces funciona a las 14: 46hrs diariamente ...
Entonces ... estoy pensando que debería funcionar, a menos que no haya hecho algo realmente tonto. Además, ¿crees que está bien mover este script bash /bin
?
/home/dnaneet/Desktop/./checkup.sh
funciona bien. Pero/home/dnaneet/Desktop/checkup.sh
puede no funcionar bien? Porque necesita un./
?Respuestas:
Una cosa a la vez:
Primero, démosle una carpeta bin basada en el usuario:
Desea usar crontab. Comencemos con algo realmente simple:
Ok, entonces eso funciona
Ahora intentemos ejecutar un script que haga lo mismo
ejecutar una vez por minuto hasta que funcione
No, no necesita un ./ en el medio de la línea. ./ es para cuando estás dando URL relativas.
Ok, entonces eso funciona
Ahora intentemos ejecutar un script que llame a xmessage
no funciona
Primero, no debemos depender de las variables de entorno. Esto incluye la configuración de 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
Configurado para ejecutarse una vez por minuto
crontab test
para importarloEn el guión
Bien, eso funciona ... ¿qué hicimos?
Cambiamos todos los comandos para no depender 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
fuente
:-/
=
para la línea que especificaDISPLAY
. En segundo lugar, cuando edité mi archivo crontab y agregué elPATH
que se sugirió y configuré el tiempo para ejecutarse en otro momento, la ventana emergente no se mostró. Sin embargo, la ventana emergente se mostró bien al ejecutar el script usando/bin/bash
... ¿qué da?export DISPLAY=:0.0
, funcionó bien. Aunque hubo un tiempo significativo de aproximadamente 5 segundos después de que el reloj marcara la hora en que mi ventana emergente debería haber mostrado ... ¿Alguna sugerencia? Pero sí, ¡enmiendas al trabajo de guión!El problema se resolvió, lea el manual en Google:
descripción:
#!/bin/bash
como encabezado/home/wc3/palert/
análisis:
responder:
ponga su entorno usando esta línea a continuación en su script con:
cambie esto:
/home/wc3/palert
con: el lugar donde coloca su script, por ejemplo
/home/budi/script.sh
muestra:
Intenta poner tu script en crontab.
fuente