【问题标题】:Cron Job Running Shell Script to Run Python Not Working运行 Shell 脚本以运行 Python 的 Cron 作业不工作
【发布时间】:2021-03-23 12:35:15
【问题描述】:

正如标题中所写,我的 cron 作业脚本未执行时遇到了一些问题。我正在使用 CentOS 7。

我的 crontab -e 看起来像这样:

30 0 * * * /opt/abc/efg/cron_jobs.sh >> /opt/abc/logs/cron_jobs.log

我的 cron_jobs.sh 看起来像这样:

#!/bin/bash

#keep this script in efg folder
#run this daily through crontab -e
#45 0 * * * /opt/abc/efg/cron_job.sh

cd "$(dirname "$0")"
export PYTHONPATH=$PYTHONPATH:`pwd`

#some daily jobs script for abc
date

#send email to users whose keys will expire 7 days later
/usr/local/bin/python2.7 scripts/send_expiration_reminder.py -d 7
#send email to key owners whos keys will expire
/usr/local/bin/python2.7 scripts/send_expiration_reminder.py -d -1

# review user follow status daily task
# Need to use venv due to some library dependencies
/opt/abc/virtualenv/bin/python2.7 scripts/review_user_status.py

所以,我发现 /var/logs/cron 中的 cron 作业的日志表明 cron 相应地在上午 0:30 运行。

奇怪的是,我发现 /opt/abc/logs/cron_jobs.log 是空的,并且脚本似乎根本没有运行。它曾经在我重新输入 crontab(重新安装 cron 作业)之前输出一些日志,并替换了 cron_jobs.sh,所以我认为问题可能来自这些操作。

另外,我想知道是否有任何方法可以记录执行 python 脚本的错误。我一直在尝试运行 /opt/abc/virtualenv/bin/python2.7 scripts/review_user_status.py 但它似乎从未按预期工作(根本不运行 main 函数),并且没有任何日志输出。

我尝试在另一台机器上运行它并且它工作正常,所以我不确定 cron 作业出了什么问题。

这是我从 /var/log/cron 获得的日志的 sn-p,以显示 cron 调用了该作业:

Mar 22 18:32:01 web41 CROND[20252]: (root) CMD (/opt/abc/efg/cron_jobs.sh >> /opt/abc/logs/cron_jobs.log)

【问题讨论】:

  • 添加命令set -x 以查看脚本运行时启动了什么
  • @Nigredon 在 shell 文件中?就像下面的 #!/bin/bash?
  • 有趣的是,我尝试使用 bash cron_jobs.sh 运行 cron_jobs.sh,它似乎工作正常。但不同的是我在运行 bash 之前调用了 chmod +x cron_jobs.sh。
  • #!/bin/bash之后添加set -x
  • 以及如何检查您可以在unix.stackexchange.com/questions/42715/…中阅读的cron作业

标签: bash python-2.7 cron


【解决方案1】:

如果您尚未执行这些操作,请检查一些区域,

  1. 如果您在脚本上设置了可执行权限, chmod +x <python file> 以及用户访问目录的权限。

  2. 手动运行脚本,从头到尾测试脚本是否正常运行,因为运行脚本的用户会更加真实。

  3. 您可以通过临时设置每分钟进行测试来测试您的 crontab 计划,这与 Windows 不同,您可以右键单击并单击运行。

【讨论】:

  • cron 作业在不同的机器上正常运行(我尝试按照您的建议每分钟使用 cron tab 进行作业,它工作正常),所以我不确定它是否是 shell 脚本问题或 crontab 问题。您对如何确定这一点有任何想法吗?
  • 在脚本没有运行的服务器上,检查你的配置是如何在其他服务器上安装脚本的。使用以下命令检查 python 是否正确安装,python -v 然后作为您要运行此 cronjob 的用户,手动运行脚本。没有 crontab,并检查所有输出和日志。
【解决方案2】:

首先,感谢大家的建议和提醒。我发现破坏我的脚本的是换行符中/r 的存在。显然Linux一般不接受/r,只接受/n

这是因为我将文件 ftp 到脚本中断的机器上。另一方面,它在另一台机器上运行良好,因为我使用git pull 而不是 ftp。

希望这些信息也对其他人有所帮助!

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2010-09-14
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2017-03-09
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多