Вопрос или проблема
У меня есть сеанс под названием ‘foo’, который я начал с команды
screen -S foo -d -m my_command_goes_here.
Я хочу поставить это в Cron, и перезапустить его каждую ночь, убивая экран. Причина, по которой я использую экран, заключается в том, что моя команда запускает несколько других процессов, и это гарантирует их завершение.
Так что… какая команда, чтобы убить сеанс ‘foo’?
Спасибо!
screen -S foo -X quit
С страницы man:
-X Отправить указанную команду в работающий сеанс экрана.
...
quit Убить все окна и завершить работу экрана.
Попробуйте использовать это:
screen -S foo -X kill
Я бы был осторожен, однако, в зависимости от того, что вы запускаете и в каком состоянии это находится, это может не убить процессы, работающие в экране, и, возможно, вызвать нестабильность файловой системы, если у него есть открытые файлы (я не знаю точно, просто предполагаю)
Кроме того, проверьте, совпадает ли пользователь с тем, под которым работает процесс, который вы хотите убить! В любом случае ничего не произойдет.
Ответ или решение
Чтобы завершить экран с именем ‘foo’, который вы запустили с помощью команды:
screen -S foo -d -m my_command_goes_here
вы можете использовать следующую команду:
screen -S foo -X quit
Эта команда отправляет указанный сигнал (в данном случае quit
) запущенной сессии экрана. Как указано в мануале, команда quit
завершает все окна и завершает сессию screen
.
Однако следует учитывать несколько моментов:
-
Обязательно проверьте, что вы выполняете данную команду от того же пользователя, под которым была создана сессия
screen
. В противном случае команда не будет выполнена, и сессия останется активной. -
Если в сессии выполняются процессы, которые могут создавать временные файлы или имеют открытые файловые дескрипторы, использование команды
quit
может привести к неустойчивому состоянию. Если вы хотите быть уверенными, что все процессы завершатся корректно, вы можете использовать следующую команду:
screen -S foo -X kill
Тем не менее, эта команда может не завершить все процессы, работающие внутри сессии, и стоит быть осторожным, так как это может вызвать проблемы с файловой системой.
Для интеграции этого подхода в cron, вы можете просто добавить команду screen -S foo -X quit
в ваш файл crontab. Например:
0 2 * * * screen -S foo -X quit
Эта запись завершит сессию foo
каждый день в 2 часа ночи, что позволит вам перезапустить её с новым процессом.
В заключение, использование команды screen -S foo -X quit
является наиболее безопасным и корректным способом завершить сессию, если вы знаете её имя.