Não é possível executar o vinho usando o crontab?

Não é possível executar o vinho usando o crontab?

Meu crontab:

* * * * * ~/d2gs.sh

Minha aplicação:

#!/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

O crontab não está iniciando o processo. O que é estranho, já que posso executar ~/d2gs.sh manualmente com sucesso.

Responder1

Você deve distinguir entre "o crontab não está iniciando o processo" e "o processo inicia, mas não faz o que deveria". E certifique-se de que o arquivo seja executável.

Em contraste com o que presumi, o uso de ~in crontabnão é um problema. Toda a string de comando é passada para um shell.

Responder2

O cd ~pode não funcionar (já queexpansão de tilnão é universal). Prefira cd $HOME(que é garantido que fará o mesmo para todas as implementações de /bin/sh...) ..... Lembre-se de que POSIX sh(ou /bin/sh) é geralmentenão bash(e você /bin/shpode não ser totalmente compatível com POSIX, mas mais parecido com "bourne")!

Claro, você pode adicionar algo parecido pwd > /dev/stderrem seu script (para fins de depuração).

winegeralmente precisa de umX11servidor para exibir janelas. E um programa iniciado crongeralmente não possui nenhum servidor ou terminal X11. Provavelmente também winenão está conseguindo iniciar (do seu crontrabalho). Talvez seja necessário definir alguma DISPLAY variável paraXlib. Mas você pode usar o Xvfb, vejaaqui.

Afinal,pgrep(1)é a digitalização de processos. Use ps aux | grep "D2GS"ou aprenda a usar pgrep sozinho.

Eu recomendo usar echo something > /dev/stderrou melhor echoouimprimirf(1)(com um adequadoredirecionamento) ouregistrador(1)no seu script, pelo menos para fins de depuração (em vários lugares).

E não redirecionarei wine-s stderr e stdout /dev/nullpelo menos durante a fase de depuração. Você não pode codificar (pelo menostemporariamentedurante a depuração) wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1e verifique /tmp/wine.out com algum pager como less?

Seu cron(e seu script de shell) não está usando seu interativoPATHvariável. Você deve considerar configurá-loexplicitamenteno seu script (oucrontab ). Vermeio ambiente(7).

informação relacionada