首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MailX在作为Systemd服务运行时不发送电子邮件

MailX在作为Systemd服务运行时不发送电子邮件
EN

Unix & Linux用户
提问于 2016-10-04 19:06:52
回答 2查看 2.4K关注 0票数 2

我有一个shell脚本,它在我的arch linux系统上的一个文件夹上运行一个clamav扫描,并且应该通过电子邮件发送结果。下面是代码:

代码语言:javascript
运行
复制
/usr/bin/clamscan -r -i /path/to/folder | /usr/bin/mailx -A gmail -s "Clam Scan Results $(/usr/bin/date +%F)" address@gmail.com

如果在bash命令行上运行,上面的一行程序可以正常工作,并且我确认在/etc/mailrc中配置的帐户工作并收到了电子邮件。但是我希望它按计划运行,我设置了一个systemd服务单元来调用一个名为~/bin/viruscan.sh的脚本,并设置了一个systemd计时器单元来在每晚凌晨2点触发它。管道后面的mailx段总是报告... email not sent

SystemD执行脚本的方式有显著差异吗?

/usr/lib/systemd/system/viruscan.service

代码语言:javascript
运行
复制
[Unit]
Description=Daily virus scan

[Service]
Type=simple
ExecStart=/home/username/bin/virusscan.sh

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/viruscan.timer

代码语言:javascript
运行
复制
[Unit]
Description=Execute virus scan daily at 2 AM

[Timer]
OnCalendar=*-*-* 02:00:00
Unit=virusscan.service

[Install]
WantedBy=multi-user.target

然后,我可以运行服务imediatelly来进行测试:

代码语言:javascript
运行
复制
sudo systemctl start virusscan 

服务运行时的状态如下:

代码语言:javascript
运行
复制
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 address@gmail.com

Oct 04 11:54:39 hurricane systemd[1]: Started Daily virus scan.

它看起来像是SystemD将脚本中的一行分解成单独的进程,它还扩展了本应作为消息主题行的字符串,并删除引号.也许这就是问题所在,我只需要适当地逃避.然后,当服务单元运行完毕时,我总是在最后有以下一行.

代码语言:javascript
运行
复制
Oct 04 11:55:01 hurricane virusscan.sh[29915]: ... message not sent
EN

回答 2

Unix & Linux用户

发布于 2017-04-19 12:50:56

根据Arch Wiki,当脚本退出时,mailx分叉和systemd会杀死主进程。看起来,将-v添加到mailx调用可以防止其分叉,但使其与systemd一起工作的更正确的方法是将-Ssendwait添加到mailx的参数中。

票数 6
EN

Unix & Linux用户

发布于 2018-04-16 09:09:49

Systemd支持选项KillMode,该选项默认为control-group。如果设置为

代码语言:javascript
运行
复制
KillMode=process

当脚本完成时,它不会终止分叉进程。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/314329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档