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

0

Meu crontab:

* * * * * ~/d2gs.sh

Minha inscriçã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 eu posso rodar o ~ / d2gs.sh com sucesso manualmente.

    
por htorbov 29.11.2017 / 21:34

2 respostas

3

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

Em contraste com o que eu assumi, o uso de ~ em crontab não é um problema. Toda a cadeia de comando é passada para um shell.

    
por 29.11.2017 / 23:40
1

O cd ~ pode não funcionar (já que a expansão do til não é universal) . Prefira cd $HOME para ele (o que é garantido para fazer o mesmo para todas as implementações de /bin/sh ...) ..... Lembre-se que POSIX sh (ou /bin/sh ) é geralmente não bash (e seu /bin/sh pode não ser totalmente compatível com POSIX, mas mais como "bourne")!

Claro, você poderia adicionar algo como pwd > /dev/stderr em seu script (para fins de depuração).

wine geralmente precisa de um servidor X11 para exibir janelas. E um programa iniciado a partir de cron geralmente não possui qualquer servidor ou terminal X11. Então wine provavelmente está falhando em iniciar (do seu trabalho cron ). Talvez seja necessário definir uma variável DISPLAY para o Xlib . Mas você pode usar o Xvfb, veja aqui .

Por fim, pgrep (1) está analisando os processos. Use ps aux | grep "D2GS" ou saiba como usar pgrep sozinho.

Eu recomendo usar echo something > /dev/stderr ou melhor echo ou printf (1) (com um adequado redirecionamento ) ou logger (1) no seu script, pelo menos para fins de depuração (em vários lugares).

E eu não vou redirecionar wine -s stderr e stdout para /dev/null pelo menos durante a fase de depuração. Você não pode codificar (pelo menos temporariamente durante a depuração)   wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1 e procure em /tmp/wine.out com algum pager como less ?

Seu cron (e seu script de shell) não está usando sua variável PATH . Você deve considerar defini-lo explicitamente no seu script (ou crontab ). Veja environ (7) .

    
por 29.11.2017 / 23:46

Tags