2016-11-25 6 views
2

У меня есть приложение, которое мы конвертируем из initd в systemd. Сценарии initd, используемые для запуска «myscript.bash start», но пользователь также может запускать «myscript.bash start». Теперь, когда пользователь запускает «myscript.bash start», он запускает systemctl (который сам запускает «запуск myscript.bash»), чтобы запустить службу. (Это тупо, я знаю - идея состоит в том, чтобы сохранить историю версий содержимого myscript.bash, но также позволить пользователям запускать систему так, как они используются, переход на systemctl должен быть невидимым).отправьте stdout/stderr на консоль для службы systemd

Раньше, если пользователь запускал myscript.bash, они получили кучу обновлений в консоли о том, как запускался запуск. Теперь эта информация не собирается на консоль. Я попробовал несколько вещей, наиболее перспективным, казалось, установка StandardOutput & StandardError к TTY:

StandardOutput=tty 
StandardError=tty 
ExecStart=/bin/bash -c './myscript.bash startup &' 
ExecStop=/bin/bash -c './myscript.bash shutdown' 

Но я получаю эту ошибку:

systemd[20694]: Failed at step STDOUT spawning /bin/bash: Inappropriate ioctl for device 

Я смотрел на это: How to Pipe Output to a File When Running as a Systemd Service? (который дал мне идею попробовать StandardOutput =), но цель состоит в том, чтобы записать в файл, и я пытаюсь получить вывод на консоль пользователя.

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

ответ

2

Я хотел сделать что-то подобное, и настройка StandardOutput=journal+console сработала для меня. FWIW это соответствующая документация systemd https://www.freedesktop.org/software/systemd/man/systemd.exec.html.

В вашем случае вы хотите посмотреть опцию TTYPath, в частности значение по умолчанию для systemd по умолчанию в вашей системе. НТН.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Marusyk

+0

Я не получаю желаемого результата с помощью журнала + console. «Консоль» означает системную консоль, то есть монитор, подключенный к аппарату, или это означает сеанс пользователя, который запускал systemd? В моем случае я засыпаю в машину и запускаю systemd -user на блоке, который forke. Я хочу видеть вывод ExecStart в реальном времени в моей сессии ssh. – papercrane