在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
相关产品推荐
相关产品推荐

