PuTTY или OTHER - продолжайте выполнять команду даже после выхода из PuTTY [duplicate]

13

У меня есть пара команд, которые мне нужно выполнить. Эти команды должны постоянно выполняться даже после выхода из интерфейса. Когда у меня есть доступ к графическому интерфейсу Linux, я выполняю что-то вроде:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Любая помощь будет высоко ценится.

user3331952
источник
Есть ли причина, по которой вы не запускаете эти сервисы как демоны?
SevenSidedDie
Являются ли команды сервисами, которые должны работать почти на 100% безотказной работы «навсегда», или долговременной задачей обработки, которая должна завершиться через некоторое время? Все ответы будут «работать» в обоих случаях, но правильные рекомендации будут другими.
Петерис
Какой конкретный дистрибутив Linux вы используете? Я обнаружил, что запуск set -m;делает так, что мои сценарии продолжают работать после того, как я выйду из CentOS и RHEL.
ArtOfWarfare

Ответы:

33

Пытаться

nohup Background_ScriptX &

nohup гарантирует, что процесс не завершается при закрытии терминала. Символ & отодвигает процесс на задний план.

Надеюсь, это было полезно.

Имонн Трэверс
источник
nohup определенно делает свою работу
Pitto
Рад помочь.
Имон Траверс
15
У screen есть одно явное преимущество перед nohup : nohup не позволяет вам вернуться к работающей команде (например, на следующее утро, чтобы прочитать ее стандартный вывод, затем выбрать его для уничтожения и т. д.). Экран позволяет вам сделать именно это.
Андреас Ф
1
nohup отправляет вывод в файл, где он может быть обработан.
Брайан Кноблаух
Для тех, кто новичок в этом nohup, это в основном "без зависания" - с nohup HUPсигнал hangup ( ) игнорируется.
Dan7119
20

Если вы хотите прочитать вывод позже, вы можете использовать screen:

screen -d -m my_command

Это дает вам отдельный терминал, к которому вы можете подключиться позже ( screen -r) для чтения вывода stdout / stderr.

отметка
источник
2
+1. Например, если вы закроете свой терминал (например, замазку), а затем снова откроете его и подключитесь к screen ( screen -r), у вас также будут все выходные данные, созданные вашей программой, и в противном случае вы бы «пропустили». Кроме того, экран может делать так много удивительных вещей, как разделенные экраны и т. Д.! :)
Альберто Сантини
6

Другой вариант, если nohupкоманда недоступна, это использовать команду disown .

Сначала вы можете просмотреть свои фоновые задачи, запустив jobsв терминале. Вы можете получить номер работы оттуда.

Теперь просто запустите, disown %[job number]и процесс будет отсоединен от текущего терминала и останется в живых, когда вы выйдете из системы.

Примечание: убедитесь, что вы задаете правильный вопрос. Если вы используете реальные сервисы, как вы намекнули в своем примере, вы можете посмотреть, как создать демон в выбранной вами ОС. Это сделано для того, чтобы процесс по-прежнему работал после перезагрузки, и чтобы он был более совместимым с другими службами.

Надеюсь это поможет.

user391035
источник
3

Поскольку screenуже упоминалось: есть другие терминальные мультиплексоры там. Мне tmuxочень нравится , см., Например, этот другой вопрос суперпользователя, tmux против экрана для сравнения.

1K5
источник
0

Вы также можете попробовать: setsid Setsid также работает с фоновыми программами и позволяет им продолжать работать после отключения терминала / ssh.

Используйте это так:

setsid program-to-background

Manpage: http://man7.org/linux/man-pages/man2/setsid.2.html

nulldev
источник