Как заставить этот подлый bash-скрипт работать в фоновом режиме 24/7?

Как заставить этот подлый bash-скрипт работать в фоновом режиме 24/7?

Это может показаться дублированием, но сначала выслушайте меня.

Я запускаю скрипт оболочки, у которого активен стандартный ввод, и иногда при запуске требуется ввод. Мне нужно, чтобы он работал 24/7, и его нужно перезапустить при сбое, либо введя команду, либо просто введя "y", если появится приглашение. Я уже пробовал два метода: использование nohup и нажатие Ctrl+Z, ввод bg — оба показывают, что задание остановлено, и оно не запущено. Только когда я его запускаю, fgоно становится активным. Есть какие-нибудь подсказки, как решить эту проблему?

P.S. Я тоже пробовал, scriptcommand &но тоже выдает «Остановлено».

Имеет ли смысл настроить его как службу systemd?

решение1

Программы, которые полагаются на ввод, как вы описали, должны запускаться внутри терминального мультиплексора, например tmux(https://en.wikipedia.org/wiki/Tmux) или screen(https://www.gnu.org/software/screen/). Думайте об этом как о текстовой версии окна терминала.

Используйте screen my-programдля начала my-program. Затем вы можетеотсоединятьс консоли виртуального экрана с помощью комбинации клавиш Ctrl- A Ctrl- D, и вы вернетесь в оболочку, с которой вы начали, но ваша программа продолжит работать в фоновом режиме. Затем, используя screen -rвы можете снова подключиться к виртуальной консоли.

экран (и ваша программа) будут продолжать работать до тех пор, пока программа не завершится или сервер не будет перезагружен.

tmuxочень похож, но имеет больше опций и функций, а также использует другие сочетания клавиш.

решение2

Чтобы скрипт продолжал работать в фоновом режиме, используйте nohup: nohup scriptcommand &. В идеале, скрипт должен иметь возможность не запрашивать ввод. Если по какой-то причине это невозможно,Ожидатьможет использоваться для ввода «y».

Создание службы systemd для скрипта позволит запустить скрипт при перезагрузке системы. Вы также можете использовать Restart=alwaysв файле systemd для перезапуска службы, если служба была завершена или остановлена,Документация systemd содержит больше информации.

Связанный контент