Как мы можем запланировать периодический запуск команды в фоновом режиме в данной интерактивной оболочке bash?

Деактивируйте 000-default с помощью a2dissite , а затем перезапустите apache.

0
05.05.2018, 06:30
1 ответ

Есть две проблемы:

  1. Сценарий выполняется в не -интерактивной подоболочке (, отличной от родительской оболочки ).
  2. Подоболочка не имеет управления заданиями.

Простое включение управления заданиями в подоболочке путем запуска сценария с помощью bash -m test.sh &не сработает, так как это также означает, что он унаследует все файловые дескрипторы от родительской оболочки. Первое, что произойдет, когда вы нажмете Enter , — скрипт будет приостановлен.

Вместо этого давайте интерпретируем «периодически» как «каждый раз, когда я нажимаю Введите для выполнения новой команды».

Это означает, что мы можем вместо этого поместить основную часть скрипта в PROMPT_COMMAND. Если эта переменная имеет значение, оно оценивается перед выдачей следующего приглашения.

PROMPT_COMMAND='jobs >/tmp/test/jobs'

Если мы запустим sleep 100 &после этого в подсказке и исследуем /tmp/test/jobs, мы увидим, что он содержит

[1]+  Running                 sleep 100 &

Через 100 секунд, если фоновые задания больше не запущены, нажатие Enter обновит файл, чтобы он содержал

[1]+  Running                 sleep 100 &
[1]+  Done                    sleep 100

После следующего ввода файл будет пуст.

1
28.01.2020, 02:43

Теги

Похожие вопросы