
Я хочу запустить скрипт Python при загрузке от имени определенного пользователя.
Скрипт представляет собой сервер (прослушивает сокет, обслуживает запросы и т. д.) и должен работать в фоновом режиме, а все выходные данные желательно направлять в файл журнала.
Мой текущий подход заключается в добавлении записи в конец rc.local следующим образом:
su -l usr -c 'script.py arg1 arg2 &> logfile.log &'
Проблема: В скрипте у меня есть несколько операторов печати. Они никогда не отображаются в файле журнала. Я пробовал
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 &'
У меня такое чувство, что я упускаю что-то элементарное. Может быть, я делаю это совершенно не тем путем.
Система Fedora 15, скрипт Python3 и отлично запускается из командной строки от имени пользователя. У пользователя есть права на запись в папку, в которую я хочу перенаправить вывод. (Я исключил это, сделав папку 777).
Я попытался запустить скрипт Python как службу Systemd, но у меня возникли проблемы с тем, чтобы мой скрипт мог захватить сокет для прослушивания (выдавая ошибку ОС об использовании сокета, если я включил службу systemd при загрузке, тогда как если я запустил systemctl start script.service после загрузки, все работало нормально).
Как запустить скрипт Python от имени пользователя при загрузке, который захватывает сокет?
решение1
Мне это подходит:
su -l usr -c "python script.py arg1 arg2 > logfile.txt &"
Я считаю, что предыдущая версия & преждевременно отодвигает «python script.py» на задний план.
решение2
Строка @Reboot сработала как по волшебству в crontab. Ответ Freetx у меня не сработал (я пробовал что-то в точности похожее, но ничего не вышло :-(