¿No se puede ejecutar Wine usando crontab?

¿No se puede ejecutar Wine usando crontab?

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 crontabno 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/shes posible que no sea totalmente compatible con POSIX, sino más bien "bourne")!

Por supuesto, puede agregar algo así pwd > /dev/stderren su script (para fines de depuración).

winegeneralmente necesita unX11servidor para mostrar ventanas. Y un programa iniciado crongeneralmente no funciona con ningún servidor o terminal X11. Probablemente también winesea no poder comenzar (desde su crontrabajo). 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/stderro mejor echooimprimirf(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/nullal 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>&1y buscar /tmp/wine.out con algún buscapersonas como less?

Su cron(y su script de shell) no está utilizando su interactivoPATHvariable. Deberías considerar configurarloexplícitamenteen su guión (o crontab). Verentorno(7).

información relacionada