Mi crontab:
* * * * * ~/d2gs.sh
Mi aplicación:
#!/bin/sh
#
# D2GS
#
# Go to the directory
cd ~
# Run the applications
if ! ps aux | pgrep "D2GS"; then
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
fi
El crontab no inicia el proceso. Lo cual es extraño, ya que puedo ejecutar ~/d2gs.sh correctamente manualmente.
Respuesta1
Hay que distinguir entre "el crontab no inicia el proceso" y "el proceso sí inicia pero no hace lo que se supone que debe hacer". Y asegúrese de que el archivo sea ejecutable.
A diferencia de lo que supuse, el uso de ~
in crontab
no es un problema. Toda la cadena de comando se pasa a un shell.
Respuesta2
Es cd ~
posible que no funcione (ya queexpansión de tildeno es universal). Lo prefiero cd $HOME
(que garantiza que hará lo mismo para todas las implementaciones de /bin/sh
...) ..... Recuerde que POSIX sh
(o /bin/sh
) generalmente esno bash
(¡Y /bin/sh
es posible que no sea totalmente compatible con POSIX, sino más bien "bourne")!
Por supuesto, puede agregar algo así pwd > /dev/stderr
en su script (para fines de depuración).
wine
generalmente necesita unX11servidor para mostrar ventanas. Y un programa iniciado cron
generalmente no funciona con ningún servidor o terminal X11. Probablemente también wine
sea no poder comenzar (desde su cron
trabajo). Es posible que necesites establecer alguna DISPLAY
variable paraxlib. Pero puedes usar Xvfb, miraaquí.
Por fin,pgrep(1)son procesos de escaneo. Úselo ps aux | grep "D2GS"
o aprenda a usarlo pgrep
solo.
Recomiendo usar echo something > /dev/stderr
o mejor echo
oimprimirf(1)(con un adecuadoredirección) oregistrador(1)en su script, al menos con fines de depuración (en varios lugares).
Y no redirigiré wine
-s stderr y stdout /dev/null
al menos durante la fase de depuración. ¿No puedes codificar (al menos?temporalmentedurante la depuración)
wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1
y buscar /tmp/wine.out
con algún buscapersonas como less
?
Su cron
(y su script de shell) no está utilizando su interactivoPATH
variable. Deberías considerar configurarloexplícitamenteen su guión (o crontab
). Verentorno(7).