Запуск `screen` через задание @reboot cron

Я хочу, чтобы сценарий запускался на экране при запуске.

Это не работает:

@reboot pi screen -d -m /home/pi/db_update.py 

однако это выполняется вручную, поскольку пользователь pi работает:

 screen -d -m /home/pi/db_update.py 

Любая идея о том, что мне не хватает?

Вместо добавления @reboot pi ... в /etc/crontab вы должны запустить crontab -e качестве пользователя pi и добавить:

 @reboot /usr/bin/screen -d -m /home/pi/db_update.py 

Обязательно используйте полный путь к экрану (просто убедитесь, что он работает без него) и что / home / pi не находится в зашифрованной файловой системе (был там, сделал это). Команда не может зависеть от чего-либо, что может быть доступно только после запуска демона cron или входа пользователя в систему.

Возможно, вам захочется добавить что-то в db_update.py (запись в файл в /var/tmp чтобы увидеть, что он действительно запущен, или поместить time.sleep (600) в конец программы python, чтобы позволить достаточно времени для входа в систему и подключения.


Протестировано на Lubuntu 13.04, python 2.7.4 со следующей записью:

 @reboot screen -d -m /home/anthon/countdown.py 

и countdown.py :

 #!/usr/bin/env python import time for x in range(600,0,-1): print x time.sleep(1) 

chmod 755 countdown.py )

Хотя это может быть обходным путем, я преодолел эту проблему, запустив сценарий оболочки, который вызывает мой сеанс экрана.

 [dude@server ~]$ crontab -l | grep sh @reboot /home/dude/.autoscreen/start.sh [dude@server ~]$ cat /home/dude/.autoscreen/start.sh #!/bin/bash cd ~ screen -S myname -d -m custom_script 

У меня был похожий, но немного другой сценарий использования, для которого экран при подключении к чему-то при запуске. У меня есть два безголовых сервера, один из которых имеет выход по последовательному каналу. Я подключился к другому безголовому серверу через последовательный кабель, и мне нужно было использовать экран для взаимодействия через последовательное соединение. Мне также необходимо убедиться, что я захватил любой вывод, созданный, не просматривая серийный сеанс.

У меня это в корневом корне

 @reboot /usr/bin/screen -d -m -c .screenrc -L /dev/ttyS0 

Сервер будет перезагружен в заданное время, если будут применены обновления безопасности. Я хочу, чтобы определенные имена файлов журнала, поэтому я могу их просмотреть, если это необходимо. В моем файле .screenrc есть эта запись

 logfile "/root/.screen_%H_%Y%m%d_%c.txt" 

поэтому, когда запускается следующий сеанс экрана, файл журнала находится в /home/root/.screen_$HOSTNAME_$YYYYMMDD_$h:$mm.txt .