Estou usando o systemd para iniciar automaticamente um serviço com o seguinte script: (veja abaixo)
Estou tentando enviar um e-mail antes que o serviço seja iniciado (a linha comentada).
o link no final da linha /home/vincent/wintergreen/service_files/IB_restart_email
é o conteúdo do e-mail, conforme descrito aqui no parágrafo 7.
Unit]
Description=Manages an instance of IBController
[Service]
Type=forking
User=vincent
Group=vincent
ExecStart=/bin/bash -c "cd /opt/IBController && bash IBControllerStart.sh -inline && sleep 10"
# ExecStartPre=/usr/bin/mail -s "Restarting TWS" [email protected] < /home/vincent/wintergreen/service_files/IB_restart_email
Environment=DISPLAY=:0.0
KillMode=control-group
TimeoutSec=0
Restart=always
[Install]
WantedBy=graphical.target
No entanto, esta linha retorna o erro mail: Cannot parse address <' (while expanding <'): Malformed email address
. (eu posso ver a mensagem de erro ao abrir o journalctl)
Este comando funciona quando usado diretamente no shell. Alguém tem uma ideia de como fazer essa linha de envio de e-mail funcionar quando usada no arquivo systemd?
PS: estou usando postfix
para envio de e-mail
Conforme documentado em
man systemd.service
, o systemd tem suporte limitado para a sintaxe do shell, que não inclui "<". Portanto, o caractere é definido para o comando "mail", resultando nesse erro.Presumo que você esteja mais interessado em e-mails devido a reinicializações automáticas, que seriam devido a falhas no serviço.
Para isso, a
OnFailure=
diretiva é uma escolha melhor. Use-o para fornecer uma lista de unidades separadas por espaços que são ativadas quando a unidade entra no estado de falha.Já existem soluções prontas para lidar com isso, como esta , que enviará por e-mail a saída de "status" (incluindo algumas saídas de log) do serviço quando ele falhar.
Além disso, considere usar a
WorkingDirectory=
diretiva em vez de chamar manualmente "cd" emExecStart=
.Também não está claro por que "dormir 10" seria necessário como parte da inicialização do aplicativo.