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 crontab
nã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/sh
pode não ser totalmente compatível com POSIX, mas mais parecido com "bourne")!
Claro, você pode adicionar algo parecido pwd > /dev/stderr
em seu script (para fins de depuração).
wine
geralmente precisa de umX11servidor para exibir janelas. E um programa iniciado cron
geralmente não possui nenhum servidor ou terminal X11. Provavelmente também wine
não está conseguindo iniciar (do seu cron
trabalho). 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/stderr
ou melhor echo
ouimprimirf(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/null
pelo 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>&1
e verifique /tmp/wine.out
com algum pager como less
?
Seu cron
(e seu script de shell) não está usando seu interativoPATH
variável. Você deve considerar configurá-loexplicitamenteno seu script (oucrontab
). Vermeio ambiente(7).