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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:57:15