O Systemd não pode iniciar o script?

8

Eu tenho um script BASH que quero executar na inicialização. Meu sistema está rodando systemd então criei um arquivo .service com o que eu acho que é a informação necessária:

[Unit]
Description=My Script
After=network.target

[Service]
ExecStart=/home/myscript.sh

[Install]
WantedBy=multi-user.target

Eu usei systemctl enable para "registrar" uma reinicialização. Na inicialização, me disseram que meu script seria executado, mas eu não conseguia ver nenhuma das mensagens que ECHO deveria exibir na tela nem escrevi algo em um arquivo, de acordo com o que eu havia escrito no script. Além disso, ele não inicia o aplicativo que deve iniciar.

O status do Systemctl informa que o script foi executado e saiu com sucesso. Ainda assim, o script não tem efeito. Se eu executar o script de um shell, ele funcionará perfeitamente bem.

Algum de vocês sabe o que poderia ser meu problema?

    
por TokyoMEWS 13.09.2012 / 16:01

2 respostas

7

Além do que a TokyoMEWS encontrou por si só ...

Apparently, if your script starts something else it needs "Type=forking"

(o que não é completamente correto - Type=forking só se torna necessário se o seu script sair enquanto seus filhos estiverem em execução )

... outros possíveis problemas são:

  1. Eu estou supondo que por "exibição na tela" você quis dizer que o script simplesmente escreve algo para stdout. Isso não não vai para a tela durante a inicialização - em vez disso, tudo a partir do stdout de um serviço é enviado para o diário (ou para syslog dependendo da versão do systemd).

  2. Se você fez tentar gravar na tela (por exemplo, usando echo Hi >/dev/tty1 ), é muito provável que a saída do script desapareça quando agetty limpar o tela antes de mostrar as solicitações de login. (Para evitar isso, você teria que pedir a unidade [email protected] ).

  3. Para escrever algo em um arquivo, é necessário ter o sistema de arquivos montado como leitura-gravação. Para isso, After=local-fs.target pode ser necessário, caso contrário, a unidade novamente pode ser iniciada muito cedo. Mas isso depende da configuração específica do sistema operacional.

por 13.09.2012 / 17:57
1

Se o seu script também definir a cláusula ExecStop , será necessário definir " RemainAfterExit = yes" para evitar que ExecStop seja chamado automaticamente após < strong> ExecStart . Isso permitirá que seu serviço esteja no status " ativo " após executar o comando ExecStart .

[Service]
ExecStart=/home/myscript.sh start
ExecStop=/home/myscript.sh stop
RemainAfterExit=yes
    
por 09.10.2017 / 03:38

Tags