Как создать несколько сеансов экрана при запуске в Linux?

Как создать несколько сеансов экрана при запуске в Linux?

Во-первых, как лучше всего выполнять команды при запуске, cron? Можно ли использовать suв скрипте оболочки переключение между разными пользователями, если да, то как?

Как создать несколько отдельных screenсеансов при запуске? screen -A -m -d -S test ./script.shКажется, это должно работать, но использование этого в скрипте, запущенном cron, не показывает никаких сеансов экрана, запущенных после загрузки.

Похоже, сеанс экрана закрывается после завершения выполнения команды. Могу ли я оставить его открытым, чтобы увидеть вывод?

Спасибо!

решение1

Чтобы запустить команду при загрузке системы, запланируйте ее @rebootв cron. man 5 crontabПодробности см. здесь. Это означает, что ваша строка crontab должна выглядеть так:

@reboot screen -m ...

Не используйте suдля этого, поместите команду в crontab пользователя, который должен запустить команду. Таким образом, пользователь сможет управлять командами без вмешательства root. (Но если вы хотите запустить команду как системный пользователь, не позволяя этому системному пользователю изменять команду из соображений безопасности, что-то вроде su -c /path/to/command www-dataэтого /etc/rc.localбыло бы лучше.)

Screen закрывает окно, когда его команда завершается, и завершает сеанс, когда закрывается его последнее окно. Если вы хотите увидеть вывод скрипта после его завершения, выполните другую команду после него, чтобы дождаться ввода. Например, чтобы оставить окно открытым, пока вы не нажмете Enterв нем:

screen sh -c './script.sh; read'

Помните, что screen хранит только конечное число строк истории. Если только script.shиногда не требуется взаимодействие, вам лучше перенаправить его вывод в файл. Если требуется взаимодействие, вы можете использовать logкоманду screen для отправки вывода в файл (и тогда не будет проблемой, если сеанс screen завершится, когда не потребуется ввод).

решение2

Попытался ли ты screen -AmdS test bash -i ./script.sh?

Я представляю, что происходит следующее: он запускает screen, который запускает скрипт, а затем, когда скрипт завершается, screen завершается. Часть bash -iсообщает screen запустить bash в интерактивном режиме, а затем bash запускает скрипт. После того, как скрипт завершит выполнение, bash продолжит ждать в командной строке, удерживая сеанс screen открытым для того, чтобы вы могли подключиться к нему, как только войдете в систему.

решение3

Создайте скрипт, который делает то, что вы хотите. Если переключение между пользователями происходит только для одной команды, то используйте su -c. В противном случае создайте отдельный скрипт и вызовите его.

Затем, чтобы ваша команда запускалась при запуске, поместите команду для запуска вашего скрипта в/etc/rc.d/rc.local

Связанный контент