Uma maneira de fazer isso é especificar que seu serviço é iniciado antes de outro serviço, usando Before= . Nesse caso, como não há GUI e você deseja impedir logins de console, você precisará usar [email protected] . (Observe, no entanto, que esse é um serviço parametrizado e, nesse caso, a parte após o @ representa a qual dispositivo executar getty on). Por exemplo:
[Unit]
Description=Run script to set up environment
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
[Service]
Type=oneshot
ExecStart=/bin/myscript
Isso garantirá que o script seja executado antes de getty iniciar em TTY 1-6.
Como alternativa, você pode criar um arquivo (vazio) que dirá [email protected] não para inicializar. Isso tem a vantagem de adicionar automaticamente a condição a todas as instâncias de getty , e não apenas de 1 a 6.
Para fazer isso, primeiro crie o arquivo antes que seu serviço seja iniciado:
[Unit]
Description=Run script to set up environment
[Service]
Type=oneshot
ExecStartPre=/bin/touch /etc/no-login-console
ExecStart=/bin/myscript
ExecStopPost=/bin/rm /etc/no-login-console
Em seguida, execute systemctl edit [email protected] . Isso abrirá seu editor e criará um arquivo "override", que será efetivamente anexado ao arquivo de serviço principal. Dessa forma, você pode fazer suas próprias personalizações no serviço, mas ainda poderá usar as versões mais recentes do arquivo de serviço do CentOS. No editor que se abre, digite:
[Unit]
ConditionPathExists=!/etc/no-login-console
Isso informa ao serviço para iniciar somente se /etc/no-login-console não existir. Salve e saia do editor. Quando você executar systemctl cat [email protected] , deverá ver o arquivo de serviço principal, seguido por sua substituição.
Editar: parece que systemctl edit e systemctl cat não estão disponíveis na versão de systemd enviada no CentOS 7.1. Em vez disso, execute sudo vim /lib/systemd/system/[email protected]/condition-path.conf (onde /lib/systemd/system/[email protected] é o caminho para o arquivo de serviço) e inclua o texto acima no arquivo. Em seguida, execute systemctl daemon-reload seguido por systemctl status getty@ . A saída deve indicar que um arquivo drop-in foi lido.