Há uma coisa bastante fundamental sobre os daemons que você está perdendo: como padrão, eles não têm terminais de controle. Eles não têm identificadores de arquivo aberto para dispositivos de terminal. Qualquer coisa que espere falar com "o terminal" não o fará. Não há "o terminal".
Não, $TERM
não especifica "o terminal". Ele especifica o terminal tipo , ou seja, quais seqüências de escape enviar como saída e interpretar como entrada. É necessário aqui, e você terá que providenciar para que seja ajustado para um valor apropriado. Mas não é o principal fator aqui. O principal fator é que não há "o terminal".
Sim, a saída acaba em /var/log/messages
. A saída padrão de um serviço vai para o diário por padrão em systemd
, e você evidentemente tem um syslogd
de algum tipo em execução. O fato de você ver isso somente depois que $TERM
foi definido significa simplesmente que seu script foi mais avançado, além da parte em que precisou conhecer o tipo de terminal para descobrir como ele produziria as coisas.
systemd
tem a capacidade de conectar daemons aos terminais. Tem que ter. Ele executa agetty
como um daemon para fornecer as sessões de login em terminais virtuais.
O que você está procurando são os StandardInput=
, StandardOutput=
e TTYPath=
configurações, para adicionar ao arquivo de unidade em sua pergunta. Dê uma olhada em /usr/lib/systemd/system/[email protected]
para vê-los em uso.
Você não dá informações suficientes em sua pergunta se esta é precisamente a abordagem correta, ou se você deveria estar adicionando um ExecStartPre=
para um /etc/systemd/system/[email protected]
personalizado. Tudo depende se isso é algo para ser executado uma vez antes de iniciar uma GUI, ou sempre antes de cada login individual (TUI). Before=graphical.target
sugere o antigo, mas isso pode não ser o que você realmente queria (dado o RequiredBy=
). ☺