Shell脚本可独立运行但Crontab执行无日志输出问题求助
排查步骤
检查目录写入权限
执行以下命令确认postgres用户对目标目录有写入权限:ls -ld /var/lib/postgres/backup sudo -u postgres touch /var/lib/postgres/backup/test_perm.log && rm /var/lib/postgres/backup/test_perm.log如果touch命令失败,说明目录权限不足,需要调整目录的所有者或权限:
sudo chown postgres:postgres /var/lib/postgres/backup sudo chmod u+rwx /var/lib/postgres/backup修正cron命令的重定向与执行方式
原cron命令未显式包含错误输出重定向,且可能因cron环境变量问题导致执行异常,修改为:40 14 * * * /bin/bash /var/lib/postgres/backup/test.sh >> /var/lib/postgres/backup/test.log 2>&1这样确保用指定的bash解释器执行脚本,同时将标准输出和错误输出都写入日志文件。
验证脚本执行权限
确认脚本拥有可执行权限:ls -l /var/lib/postgres/backup/test.sh如果没有可执行权限,执行:
sudo chmod +x /var/lib/postgres/backup/test.sh测试简化的cron任务
创建一个极简的cron任务排除脚本本身的问题:* * * * * echo "cron test" >> /var/lib/postgres/backup/test_echo.log 2>&1等待1分钟后检查是否生成日志,如果生成,说明问题出在原脚本的执行环境而非cron重定向;如果未生成,重点排查目录权限或系统安全策略。
检查AppArmor限制
Ubuntu系统中AppArmor可能限制postgres用户的写入路径,执行以下命令查看状态:sudo aa-status如果postgres的profile处于enforce模式,可临时切换为complain模式测试:
sudo aa-complain /etc/apparmor.d/usr.bin.postgres若切换后日志正常生成,需修改AppArmor规则,允许postgres写入
/var/lib/postgres/backup/目录。测试临时目录写入
将日志输出到/tmp目录(默认所有用户可写):* * * * * /bin/bash /var/lib/postgres/backup/test.sh >> /tmp/test_cron.log 2>&1若/tmp下生成日志,说明原目标目录存在权限或安全限制。
内容的提问来源于stack exchange,提问作者Beomgeun Cho
相关产品推荐
相关产品推荐

