You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在systemd下运行的bash脚本中mailx发送邮件失败问题求助

解决systemd执行脚本时mailx无法发送邮件的问题

问题概述

bash脚本在命令行运行时可正常发送带附件的邮件,但通过systemd service执行时,mailx命令无法完成邮件发送操作,且journalctl中无相关错误信息。相关代码与配置如下:

脚本中的邮件发送代码

# email report
/usr/bin/mailx -a $OUTFILE -s "SYSTEM REPORT `date '+%A, %B %d, %Y'`" \
   "mygmailaddress@gmail.com"  << EOF
System report attached
EOF

systemd service配置

[Service]
User=myuser
Group=mygroup
ExecStart=/usr/bin/bash -c '/home/myuser/bin/system.bash' 
WorkingDirectory=/home/myuser

环境:Fedora 37 x86_64,所有软件均为最新版本。已尝试移除附件、修改邮件主题等操作,问题仍存在。


排查与解决步骤

1. 补全环境变量

systemd的执行环境比命令行精简,mailx可能依赖某些环境变量(如PATH、邮件配置相关变量)。可先对比两种环境的变量差异:

# 在脚本开头添加,导出systemd执行时的环境变量
env > /tmp/systemd_env.log
# 命令行手动执行脚本,导出终端环境变量
env > /tmp/terminal_env.log
# 对比差异
diff /tmp/systemd_env.log /tmp/terminal_env.log

若发现缺失关键变量,可在service文件中通过Environment指令补充,例如:

[Service]
# 保留原有配置
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"

2. 确保文件路径与权限

  • 将脚本中$OUTFILE改为绝对路径,避免systemd解析相对路径出错;
  • 检查myuser对$OUTFILE文件有读权限,对/usr/bin/mailx有执行权限(可通过ls -l /usr/bin/mailx确认)。

3. 捕获mailx错误输出

修改脚本,将mailx的错误信息重定向到日志文件,以便定位问题:

/usr/bin/mailx -a $OUTFILE -s "SYSTEM REPORT $(date '+%A, %B %d, %Y')" \
   "mygmailaddress@gmail.com"  << EOF 2>> /tmp/mailx_error.log
System report attached
EOF

执行后查看/tmp/mailx_error.log,可获取具体错误原因(如配置文件缺失、SMTP认证失败等)。

4. 指定mailx配置文件

mailx通常依赖用户家目录的.mailrc配置SMTP信息,可在脚本中手动指定配置文件路径,确保systemd能读取到:

/usr/bin/mailx -S mailrc=/home/myuser/.mailrc -a $OUTFILE -s "SYSTEM REPORT $(date '+%A, %B %d, %Y')" \
   "mygmailaddress@gmail.com"  << EOF 2>> /tmp/mailx_error.log
System report attached
EOF

5. 优化systemd执行方式

修改service的ExecStart,直接调用脚本而非通过bash -c,同时确保脚本有可执行权限:

[Service]
User=myuser
Group=mygroup
ExecStart=/home/myuser/bin/system.bash
WorkingDirectory=/home/myuser

执行权限设置:

chmod +x /home/myuser/bin/system.bash

6. 检查SELinux限制

Fedora默认开启SELinux,可能阻止systemd执行的脚本发送邮件。可临时关闭测试:

sudo setenforce 0

若问题解决,可通过以下命令恢复SELinux并添加允许规则:

sudo setenforce 1
sudo restorecon -v /home/myuser/bin/system.bash
# 生成并加载自定义SELinux规则
sudo audit2allow -a -M mailx_systemd
sudo semodule -i mailx_systemd.pp

内容的提问来源于stack exchange,提问作者John W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:35:24