
Quero executar um script python na inicialização como um usuário específico.
O script é um servidor (escuta em um soquete, atende 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 do 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 perdendo algo básico. Talvez eu esteja fazendo isso de maneira totalmente errada.
O sistema é o Fedora 15, o script é Python3 e funciona bem na linha de comando como usuário. O usuário tem permissões de gravação na pasta para a qual desejo que a saída seja redirecionada. (Eu descartei criando a pasta 777).
Tentei executar o script python como um serviço Systemd, mas estava tendo problemas com meu script ao conseguir pegar um soquete para escutar. (lançando um erro de sistema operacional sobre o soquete em uso se eu habilitei o serviço systemd na inicialização, enquanto se eu executei systemctl start script.service após a inicialização, as coisas funcionaram bem).
Como posso iniciar um script python como um usuário na inicialização que captura um soquete?
Responder1
Isso funciona para mim:
su -l usr -c "python script.py arg1 arg2 > logfile.txt &"
Acredito que o anterior & está colocando "python script.py" em segundo plano prematuramente.
Responder2
A linha @Reboot funcionou perfeitamente no crontab. A resposta do Freetx não funcionou para mim (tentei algo exatamente igual e sem dados :-(