Cron Job 运行ning Shell 运行 Python 的脚本不工作
Cron Job Running Shell Script to Run Python Not Working
正如标题所写,我的 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 "[=14=]")"
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 作业日志表明 0:30 的 cron 运行 是相应的。
St运行gely,我发现 /opt/abc/logs/cron_jobs.log 是空的,脚本似乎根本没有 运行。它曾经在我 re-inputted crontab(到 re-install cron 作业)之前输出一些日志,并替换了 cron_jobs.sh,所以我认为问题可能是由这些操作引起的。
另外,我想知道是否有任何方法可以记录执行 python 脚本的错误。我一直在尝试 运行 /opt/abc/virtualenv/bin/python2.7 scripts/review_user_status.py 但它似乎从未按预期工作(根本不是 运行 主要功能),并且有没有任何日志输出。
我尝试在另一台机器上 运行 这个并且它工作正常,所以我不确定 cron 作业有什么问题。
这是我从 /var/log/cron 获得的日志片段,显示 cron 调用了该作业:
Mar 22 18:32:01 web41 CROND[20252]: (root) CMD (/opt/abc/efg/cron_jobs.sh >> /opt/abc/logs/cron_jobs.log)
如果您还没有执行这些操作,请检查几个方面,
如果您在脚本上设置了可执行权限,
chmod +x <python file>
此外还允许用户访问目录。
运行脚本手动测试脚本从头到尾的工作,作为将运行脚本的用户,会更真实。
你可以通过临时设置每分钟进行测试来测试你的crontab计划,不像Windows那里你可以右键,点击然后点击运行。
首先感谢大家的建议和提醒。我发现破坏我的脚本的是换行符中 /r
的存在。显然,Linux一般不接受/r
,只接受/n
.
这是因为我ftp我的文件到脚本中断的机器。另一方面,它在另一台机器上工作正常,因为我使用 git pull
而不是 ftp。
希望此信息对其他人也有帮助!
正如标题所写,我的 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 "[=14=]")"
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 作业日志表明 0:30 的 cron 运行 是相应的。
St运行gely,我发现 /opt/abc/logs/cron_jobs.log 是空的,脚本似乎根本没有 运行。它曾经在我 re-inputted crontab(到 re-install cron 作业)之前输出一些日志,并替换了 cron_jobs.sh,所以我认为问题可能是由这些操作引起的。
另外,我想知道是否有任何方法可以记录执行 python 脚本的错误。我一直在尝试 运行 /opt/abc/virtualenv/bin/python2.7 scripts/review_user_status.py 但它似乎从未按预期工作(根本不是 运行 主要功能),并且有没有任何日志输出。
我尝试在另一台机器上 运行 这个并且它工作正常,所以我不确定 cron 作业有什么问题。
这是我从 /var/log/cron 获得的日志片段,显示 cron 调用了该作业:
Mar 22 18:32:01 web41 CROND[20252]: (root) CMD (/opt/abc/efg/cron_jobs.sh >> /opt/abc/logs/cron_jobs.log)
如果您还没有执行这些操作,请检查几个方面,
如果您在脚本上设置了可执行权限,
chmod +x <python file>
此外还允许用户访问目录。运行脚本手动测试脚本从头到尾的工作,作为将运行脚本的用户,会更真实。
你可以通过临时设置每分钟进行测试来测试你的crontab计划,不像Windows那里你可以右键,点击然后点击运行。
首先感谢大家的建议和提醒。我发现破坏我的脚本的是换行符中 /r
的存在。显然,Linux一般不接受/r
,只接受/n
.
这是因为我ftp我的文件到脚本中断的机器。另一方面,它在另一台机器上工作正常,因为我使用 git pull
而不是 ftp。
希望此信息对其他人也有帮助!