2012-07-29 02:04:52 +0000 2012-07-29 02:04:52 +0000
82
82

Как выполнить команду на экране и отсоединиться?

Как я могу получить экран для выполнения команды, а затем отсоединиться (т.е. автоматически в одном скрипте без дальнейшего ввода, кроме первоначального запуска скрипта)? Например, я запускаю myscript.sh и он автоматически запускает сеанс экрана, выполняет команду, а затем отсоединяет.

Ответы (5)

120
120
120
2012-07-29 02:20:11 +0000

Это легко:

screen -d -m yourcommand
49
49
49
2012-07-29 02:10:53 +0000

Чтобы выполнить одну команду на экране и отсоединиться, можно попробовать:

screen -dm sleep 10

Чтобы запустить несколько команд, попробуйте:

screen -dm bash -c "sleep 10; myscript.sh"

Обратите внимание, что при завершении программы экран (по умолчанию) убивает содержащееся в нем окно.

Если вы не хотите, чтобы ваш сеанс был убит после завершения работы скрипта, добавьте exec sh в конце, например:

screen -dm bash -c 'sleep 5; exec sh'

Чтобы перечислить все ваши сессии, попробуйте:

screen -list

Похожие: Запуск экрана Unix, команда Выполнить, Отсоединить .

16
16
16
2016-11-06 08:03:26 +0000

Для того, чтобы начать новую сессию в фоновом режиме с именем ‘сонный’

screen -S sleepy -dm sleep 60

Для того, чтобы убить ‘сонный’ сеанс

screen -S sleepy -X quit
3
3
3
2018-03-14 05:40:50 +0000
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
0
0
0
2019-04-29 09:38:39 +0000

это случилось со мной, когда я нажал кнопку управления c (sig int), чтобы выйти из моей программы. она выходит со всех басов. так что я нашел это, чтобы поймать SIGINT. и предотвратить выход из последней басы. (нужно напечатать exit to exit)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"

example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ; bash"

Я нахожу полезным использовать cron для запуска программ nodejs при старте. и для запуска экрана во время загрузки. в cron есть специальный синтаксис событий @reboot event

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"