#linux #bash #systemd
#linux #bash #systemd
Вопрос:
Я создал службу с systemd, которая использует wendy (инструмент замены inotify) для прослушивания каталога и запуска bash-скрипта, когда что-то меняется.
однако мой скрипт использует stdin в определенное время для чтения переменной. но когда служба запускается, она полностью пропускает запрос ввода в терминале и переходит к остальной части скрипта bash.
я новичок в systemd и службах, могу ли я в любом случае заставить его запрашивать у меня ввод?
это то, что произошло из /var/log/ syslog
7 октября 21:52:09 сервер wendy.sh [13062]: был добавлен в скрипты.
7 октября 21:52:09 сервер wendy.sh [13062]: введите имя скрипта: (/home/user/scripts/blah.sh )
7 октября 21:52:09 сервер wendy.sh [13062]: chmod: пропущенный операнд после x
7 октября 21:52:09 сервер wendy.sh [13062]: Попробуйте ‘chmod —help’ для получения дополнительной информации.
предполагалось, что он должен был запросить у меня имя скрипта для передачи в chmod.
Как это сделать?
Спасибо
Комментарии:
1. 1) Рассмотрим поведение
read v </dev/null
. 2) Спросите себя, как служба должна знать, какой из многих/dev/tty*
,/dev/pts/*
, графических интерфейсов и т. Д. Он должен использовать для ввода.
Ответ №1:
К сожалению, очень сложно запросить ввод данных пользователем в скрипте, работающем в качестве фоновой задачи, потому что у них нет подключенного терминала. Я бы посоветовал вам попытаться найти альтернативу чтению входных данных из stdin.
Если вы действительно хотите этого добиться, вы могли бы, например, запустить где-нибудь программу, которая будет прослушивать сокет UNIX, и ваш автоматизированный скрипт мог бы связаться с этим клиентом, чтобы запросить ввод (например, this Stack Exchange post ).).
В netcat-openbsd есть опция -U. Если у вас его нет, у вас, вероятно, вместо него установлен netcat-traditional; Я бы посоветовал переключиться.
Пример команды: nc -U /var/run/socket