Это может показаться дублированием, но сначала выслушайте меня.
Я запускаю скрипт оболочки, у которого активен стандартный ввод, и иногда при запуске требуется ввод. Мне нужно, чтобы он работал 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 содержит больше информации.