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" &

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

5 ответов5

33

Пытаться

nohup Background_ScriptX &

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

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

20

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

screen -d -m my_command

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

6

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

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

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

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

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

3

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

0

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

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

setsid program-to-background

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .