Eu tenho um shell script que executa uma varredura clamav em uma pasta no meu sistema arch linux e deve enviar os resultados por e-mail. Aqui está o código:
/usr/bin/clamscan -r -i /path/to/folder | /usr/bin/mailx -A gmail -s "Clam Scan Results $(/usr/bin/date +%F)" [email protected]
O one-liner acima funciona bem se for executado na linha de comando bash e eu confirmei que a conta configurada em /etc/mailrc
funciona e o email é recebido. Mas eu quero que ele seja executado em um cronograma e eu configurei uma unidade de serviço do systemd para chamar um script chamado ~ / bin / virusscan.sh e uma unidade de timer do systemd para ativá-lo às 2 da manhã todas as noites. A parte do mailx após o pipe está sempre reportando ... email not sent
Existe uma diferença significativa em como o SystemD executa o script?
/usr/lib/systemd/system/virusscan.service
[Unit]
Description=Daily virus scan
[Service]
Type=simple
ExecStart=/home/username/bin/virusscan.sh
[Install]
WantedBy=multi-user.target
/usr/lib/systemd/system/virusscan.timer
[Unit]
Description=Execute virus scan daily at 2 AM
[Timer]
OnCalendar=*-*-* 02:00:00
Unit=virusscan.service
[Install]
WantedBy=multi-user.target
Então eu posso executar o serviço imediatamente para testar com:
sudo systemctl start virusscan
E o status do serviço durante a execução é o seguinte:
virusscan.service - Daily virus scan
Loaded: loaded (/usr/lib/systemd/system/virusscan.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2016-10-04 11:54:39 PDT; 11s ago
Main PID: 29915 (virusscan.sh)
Tasks: 4 (limit: 4915)
CGroup: /system.slice/virusscan.service
├─29915 /bin/sh /home/username/bin/virusscan.sh
├─29920 /usr/bin/clamscan -r -i /path/to/folder/
└─29921 /usr/bin/mailx -A gmail -s Clam Scan Results 2016-10-04 [email protected]
Oct 04 11:54:39 hurricane systemd[1]: Started Daily virus scan.
Parece que o SystemD quebra o único liner no script em processos separados e também expande a string que deveria ser a linha de assunto da mensagem e remove as aspas ... Esse poderia ser o problema, talvez, e Eu só preciso escapar corretamente ... Então, quando a unidade de serviço terminar, eu sempre tenho a seguinte linha no final ...
Oct 04 11:55:01 hurricane virusscan.sh[29915]: ... message not sent