Запуск процесса в фоновом режиме после закрытия терминала
Я пытаюсь запустить скрипт в фоновом режиме, даже после закрытия терминала. Я искал, искал и пытался!--1--> и disown
но ни один из них не работает. Когда я закрываю окно терминала, я получаю типичное Closing this window will terminate the running processes: watch.
сообщение. Это заканчивается завершением моего фонового процесса, даже при использовании nohup
или disown
. В чем может быть проблема?
мой код представляет собой простые две строки
cmd="nohup watch -n 1 sudo /etc/block.sh > /dev/null"
$cmd & # blocks automatically
он расположен в .bash_profile
, потому что я хочу, чтобы это начать всякий раз, когда я открываю новый терминал.
вы можете игнорировать sudo; я уже нашел способ выполнить команду sudo без ввода пароля.
Я использую Mac OSX.
2 ответов
запуск подрешетки и запуск nohup
команда оттуда, кажется, избегает того, чтобы терминал убил его при выходе.
bash -c "nohup sh -c 'while true; do date; sleep 1; done' &"
не очень элегантно, но работает для меня.
на это уже ответили, но утилита экрана кажется, что это было бы идеально для этого.
man screen
для просмотра документации для экрана.www.ss64.com/osx/screen.html
для просмотра немного более удобной документации.-
начальный экран с именем и сценарием для запуска:
screen -S GWatch Scripts/gw_watch.sh This starts a screen session named 'GWatch' and executes gw_watch.sh.
при запуске сеанса экрана есть возможность отключения от него. Этот оставит экран активным в фоновом режиме. Он будет оставаться активным даже после выхода пользователя из системы (несмотря на разрешения).
вот пример:
- создать скрипт, названный 'screencheck.sh'
-
поместите в файл следующее (Я часто использую textwrangler и / или nano).
#!/bin/bash count=0 while [ $count -lt ] ; do echo "Count: $count of . Pausing for five seconds." sleep 5s ((count++)) done
открыть два окна терминала.
- в одном из окон терминала введите
screen -ls
. Вы должно появиться сообщение об отсутствии сокетов. - во втором окне терминала измените каталог, в котором был сохранен скрипт.
- во втором окне терминала
screen -S ScreenCheck screencheck.sh 500
. screencheck.sh должен быть исполняемым. -
во втором окне терминала вы должны увидеть:
Count: 0 of 500. Pausing for five seconds. Count: 1 of 500. Pausing for five seconds. Count: 2 of 500. Pausing for five seconds. ...
- отключитесь от сеанса экрана, набрав
ctrl-a d
. Это control + a, отпустите оба, D ключ. - вы должны увидеть
[detached]
. - в первом терминале введите
screen -ls
. -
вы должны увидеть что-то вроде:
FCH000: ~: screen -ls There is a screen on: 1593.ScreenCheck (Detached) 1 Socket in /var/folders/pk/l6b5fhkj6mxfpfh8mtgmstg40000gn/T/.screen.
Reattach к сеансу экрана с помощью
screen -R ScreenCheck
.-
вы должны увидеть что-то вроде:
Count: 226 of 500. Pausing for five seconds. Count: 227 of 500. Pausing for five seconds. Count: 228 of 500. Pausing for five seconds. Count: 229 of 500. Pausing for five seconds. ...
чтобы увидеть, работает ли он после выхода из системы, выйдите из системы и ssh на компьютер с другого компьютера. screen -ls
должен показывать тот же сеанс экрана, что и до.
надеюсь, это поможет.