Executando Python Script na inicialização como um usuário específico

Executando Python Script na inicialização como um usuário específico

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 :-(

informação relacionada