LINUX.ORG.RU

Запуск программы после автологина Ubuntu Server 16.04

 


0

1

Доброго всем!

Была задача, запускать систему с автологином в командную строку и после запуска выполнять определенную программу в screen (через sh скрипт, который перед запуском выводит некоторое инфо), вывод информации от которой шел бы в терминал.

В Ubuntu Server 14.04 задачу решил правкой tty1.conf для осуществления автологина и добавлением sh скрипта в init.d с последующей обработкой update-rc.d. При запуске на экране появлялся текстовый интерфейс программы и она работала успешно.

Вот собственно сам скрипт clstart.sh:
#!/bin/sh -e
clear
echo "##################################################"
cd /home/username/cl
screen -S cl ./clayprog

Необходимо было перейти на 16.04 (по некоторым аппаратным соображениям). Здесь автовход реализовал через override.conf для сервиса getty@tty1.service.d, а загрузку нужного мне скрипта созданием своего сервиса

[Unit]
Description=ClProg
After=multi-user.target
[Service]
Type=idle
ExecStart=/bin/sh /home/username/cl/clstart.sh
[Install]
WantedBy=multi-user.target

В таком случае, если в моем скрипте запуск нужной программы идет через screen, то после рестарта системы ничего не запускается (в логе пишет must be connected to terminal и переменная TERM не инициализирована), а если напрямую, то процесс запускается в фоне и работает, а я вижу пустое приглашение командной строки после автологина, но мне то нужно, чтобы вывод информации от работы моей программы шел в активный терминал.

Умы, подскажите, как побороть системд, как перенаправить вывод после автологина?

если нужен вывод в активный терминал, то в [Service] надо прописать StandardOutput=tty. Ну или StandardError. От shell-скриптов в юните (clstart.sh и подозреваю что cl) хорошо бы избавиться, тут они ни к чему.

anonymous
()
Ответ на: комментарий от anonymous

За наводку благодарствую! Работает, ровно, как и надобно с вот таким составом юнита в сервисе (именно после перезагрузки, при старте системы).

[Unit]
Description=Cl
After=multi-user.target
[Service]
Type=idle
User=username
ExecStart=/home/username/cl/clstart.sh
StandardOutput=tty
StandardInput=tty
[Install]
WantedBy=multi-user.target

adstudio
() автор топика
Ответ на: комментарий от adstudio

К сожалению выявилась одна неувязка. Хоть логирование работы программы идет в терминал и все очень даже красиво, ввод с клавиатуры не идет в работающую программу. Пробовал StandardInput=tty-force и fail, те же грабли. То есть программа выводит инфо в терминал и прекрасно работает, пока я ввожу системные команды и выполняю их в том же терминале. Завершить программу по ctrl+x/c соответственно не выходит. Умы, как же сразу давать «фокус» моей программе?

adstudio
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.