2

Вступление

Я недавно обновился до Fedora 17 и привыкаю к более новому менеджеру демона systemctl сравнению со сценариями инициализации оболочки.

Функция, которая мне нужна для некоторых моих демонов, - это возможность взаимодействовать с их консолями, потому что нечистое завершение работы, не инициированное самим процессом, может привести к повреждению базы данных. Таким образом, выполнение systemctl stop service-name.service например, может привести к необратимой потере данных.

Эти консоли читают пользовательский ввод с помощью stdin или аналогичных методов, поэтому в моей старой ОС я разместил эти демоны в качестве основы в сеансе screen , и я приостановил этот сеанс экрана с помощью ^A ^z . Также стоит отметить, что теперь я заставил systemctl делать это автоматически, если компьютер перезагружается, но это все еще не решает мою потенциальную проблему повреждения данных, которую я пытаюсь избежать.


Мой вопрос

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


Спасибо

Вы, ребята, всегда даете отличные ответы, поэтому я обращаюсь к вам!

1 ответ1

1

Похоже, вы сможете перенаправить его на tty.

StandardInput =

Управляет подключением файлового дескриптора 0 (STDIN) исполняемых процессов. Принимает одно из следующих значений: null, tty, tty-force, tty-fail или socket. Если выбрано значение null, стандартный вход будет подключен к /dev /null, т.е. все попытки чтения процесса приведут к немедленному EOF. Если выбран tty, стандартный вход подключается к TTY (как сконфигурировано с помощью TTYPath =, см. Ниже), и выполненный процесс становится процессом управления терминалом. Если терминалом уже управляет другой процесс, исполняемый процесс ожидает, пока текущий процесс управления не освободит терминал. tty-force аналогична tty, но исполняемый процесс принудительно и немедленно выполняет процесс управления терминалом, потенциально удаляя предыдущие процессы управления из терминала. tty-fail аналогичен tty, но если у терминала уже есть управляющий процесс, запуск исполняемого процесса завершается неудачно. Опция сокета действительна только в сервисах, активированных сокетом, и только в том случае, если в файле конфигурации сокета (подробности см. В systemd.socket (5)) указан только один сокет. Если эта опция установлена, стандартный вход будет подключен к сокету, из которого была активирована служба, что в первую очередь полезно для совместимости с демонами, предназначенными для использования с традиционным демоном inetd (8). Этот параметр по умолчанию равен нулю.

Ссылка на цитату

О, и если это не сработает, мы сделаем что-то действительно сложное с сокетами Unix, которое, я уверен, вам понравится.

Винт эту ерунду, попробуйте что-то вроде этого, если вышеупомянутое не приемлемо

Вы можете попробовать записать в каталог /proc pid. Скажите, что pid вашего демона 2000, попробуйте написать в /proc /2000 /fd /0

источник

Вы можете добавить эту строку в ExecStop =, что освобождает вас от необходимости взаимодействовать вручную вообще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .