A linha @Reboot funcionou como um charme no crontab. A resposta da Freetx não funcionou para mim (eu tentei algo exatamente igual e sem dados: - (
Eu quero executar um script python na inicialização como um usuário específico.
O script é um servidor (escuta em um soquete, serve solicitações, etc) e deve ser executado em segundo plano, com qualquer saída preferencialmente canalizada para um arquivo de log.
Minha abordagem atual é adicionar uma entrada no final de rc.local assim:
su -l usr -c 'script.py arg1 arg2 &> logfile.log &'
O problema: No script, tenho várias instruções de impressão no script. Eles nunca aparecem no arquivo de log. Eu tentei
su -l usr -c 'script.py arg1 arg2 &> logfile.log &'
su -l usr -c 'script.py arg arg &> logfile.log &' &> secondLogfile.log &
su -l usr -c 'script.py arg arg &> logfile.log &'
su usr -c 'script.py arg arg &> logfile.log &'
Tenho a sensação de que estou sentindo falta de algo básico. Talvez eu esteja indo de um jeito totalmente errado.
O sistema é o Fedora 15, o script é Python3 e roda bem a partir da linha de comando como usuário. O usuário tem permissões de gravação na pasta para a qual a saída deve ser redirecionada. (Eu descartei isso fazendo a pasta 777).
Eu tentei ter o script python executado como um serviço Systemd, mas eu estava tendo problemas com meu script sendo capaz de pegar um soquete para ouvir. (lançando um erro de sistema operacional sobre o soquete em uso se eu ativasse o serviço systemd na inicialização, ao passo que se eu executasse o script systemctl start script.service depois da inicialização, tudo funcionaria bem).
Como posso iniciar um script python como um usuário na inicialização que captura um soquete?
Isso funciona para mim:
su -l usr -c "python script.py arg1 arg2 > logfile.txt &"
Eu acredito que o anterior & está empurrando "python script.py" para o fundo prematuramente.