
Por favor, dê uma olhada no seguinte script de shell simples startCleanup.sh
:
#!/bin/sh
screen -d -m -S cleaner /usr/bin/python3 /opt/cleanup.py
Meu crontab está assim:
* * * * * /opt/startCleanup.sh > /opt/cleanup.log 2>&1
Quando executo este script no shell como um usuário conectado normalmente, não tenho problemas. No entanto, se eu executar isso como um cronjob normal, nenhuma tela será iniciada. Ou melhor dizendo: A tela é iniciada (eu acho) mas quando o script termina e junto com o script a tela também é encerrada.
Alguém tem uma idéia de como resolver esse problema?
obrigado :)
ATUALIZAÇÃO: Ok, agora eu definitivamente sei que a tela foi executada corretamente (verifiquei isso adicionando um sleep no final do script bash).
Então eis o que acontece: A tela é criada. MAS quando o script bash termina, a tela também é encerrada. Então, a tela ainda depende do script.
Como posso evitar que a tela seja encerrada quando o script terminar?
Responder1
você já tentou algo assim?
#!/bin/sh
screen -D -R cleaner /usr/bin/python3 /opt/cleanup.py
Esta combinação de parâmetros tentará reconectar-se a uma sessão, se existir, ou criar, se não existir, de acordo com a página de manual.
Além disso, não acho que haverá nenhuma saída redirecionada para o arquivo, exceto quaisquer erros que ocorram ao chamar a tela.
Responder2
na verdade, usar screen aqui não parece fazer muito sentido. Mas verifiquei sua solução na minha caixa e funciona bem. A sessão de tela é iniciada a partir do script iniciado no cronjob e posso anexar a ele. Experimente algumas coisas:
- adicione o caminho completo para a tela no script startCleanup.sh
- observe /var/log/cron se os jobs forem iniciados
- redirecione a saída de /usr/bin/python3 /opt/cleanup.py para o arquivo e verifique se funciona bem quando iniciado através do cron
Responder3
estou enfrentando um problema semelhante ao seu, acionar manualmente o arquivo sh está totalmente correto. mas no cronjob ele não executa o processo da tela, esse é meu código original do arquivo sh
#!/bin/bash
bash -c "python GetCookie.py"
wait
export DISPLAY=:0
Respond=`screen -ls`
if [[ $Respond != *"UploadImage"* ]]; then
screen -dmS myAction bash -c " cd ~/DirectoryName ; /usr/bin/php7.4 index.php bag 1"
else
echo "NOPEEEE"
fi
o log do cronjob mostrou que acionou o trabalho. mas emtela -lsnão mostra nenhum processo em andamento.
o que eu fiz foi mudar
screen -dmS myAction bash -c " cd ~/DirectoryName ; /usr/bin/php7.4 index.php bag 1"
para
screen -d -m -S myAction bash -c " cd ~/DirectoryName ; /usr/bin/php7.4 index.php bag 1"
e meu problema foi resolvido.