Скрипт Fork Shell (не &) - PullRequest
       31

Скрипт Fork Shell (не &)

2 голосов
/ 27 января 2011

Я получаю доступ к веб-серверу через PHP. Я хочу обновить некоторую информацию в конфигах Apache, поэтому я запускаю скрипт оболочки, который вносит изменения. Затем я хочу остановить и перезапустить Apache.

Проблема: как только я останавливаю Apache, мой процесс останавливается и мой сценарий оболочки, являющийся дочерним процессом, уничтожается. Апач никогда не перезагружается. Это также происходит при перезапуске Apache.

Есть ли способ создать независимый, не дочерний процесс для сценария оболочки, чтобы я мог перезапустить Apache?

Thx, Мистер Б

Ответы [ 2 ]

4 голосов
/ 27 января 2011

Вы можете использовать disown:

disown [-ar] [-h] [jobspec ...]

Без параметров каждая спецификация заданий удаляется из таблицы активных заданий. Если задана опция `-h ', задание не удаляется из таблицы, но помечается так, что SIGHUP не отправляется заданию, если оболочка получает SIGHUP. Если задание отсутствует, и не указана ни опция -a, ни опция -r, используется текущее задание. Если спецификация заданий не указана, опция `-a 'означает удаление или пометку всех заданий; опция `-r 'без аргумента jobspec ограничивает выполнение операций заданиями.

./myscript.sh &
disown

./myscript.sh продолжит работу, даже если скрипт, который его запустил, умрет.

1 голос
/ 27 января 2011

Посмотрите на nohup , может соответствовать вашим потребностям.

Допустим, у вас есть скрипт с именем test.sh

for i in $(seq 100); do
  echo $i >> test.temp
  sleep 1;
done

, если вы запускаете nohup./test.sh & вы можете убить оболочку и процесс останется живым.

...