我正在尝试从cron运行Django管理命令。我使用virtualenv保持我的项目沙盒。
我在这里和其他地方看到了从virtualenv中运行管理命令的示例,例如:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
然而,尽管syslog显示了任务应该在何时启动的条目,但该任务从未实际运行(脚本的日志文件为空)。如果我从shell中手动运行这一行,它将按预期工作。
我目前可以通过cron运行命令的唯一方法是将命令分解并将它们放在一个哑bash包装脚本中:
#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg
编辑:
Ars提出了一个命令的工作组合:
0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg
至少在我的例子中,调用virtualenv的激活脚本没有任何作用。这招管用,所以节目继续。
如果你和我一样是MacOS用户,你可以在/var/mail/{username}文件中查看crontab错误信息。像这样
tail /var/mail/{username}
如果出现“操作不允许”错误,也许你必须将cron添加到全磁盘访问应用程序(安全和隐私>隐私>全磁盘访问应用程序/execs)。
点击+按钮,转到/usr/sbin,双击cron文件。
然后它将修复“不允许”错误。详细步骤
这是我的代码:
0 19 * * * cd /Users/user/Desktop/Project && source /Users/user/Desktop/Project/venv/bin/activate && python command arg
你应该能够通过在虚拟环境中使用python来做到这一点:
/home/my/virtual/bin/python /home/my/project/manage.py command arg
编辑:如果你的django项目不在PYTHONPATH目录下,那么你需要切换到正确的目录:
cd /home/my/project && /home/my/virtual/bin/python ...
您也可以尝试从cron记录失败:
cd /home/my/project && /home/my/virtual/bin/python /home/my/project/manage.py > /tmp/cronlog.txt 2>&1
另一件要尝试的事情是在你的manage.py脚本最上面做同样的改变:
#!/home/my/virtual/bin/python
如果你和我一样是MacOS用户,你可以在/var/mail/{username}文件中查看crontab错误信息。像这样
tail /var/mail/{username}
如果出现“操作不允许”错误,也许你必须将cron添加到全磁盘访问应用程序(安全和隐私>隐私>全磁盘访问应用程序/execs)。
点击+按钮,转到/usr/sbin,双击cron文件。
然后它将修复“不允许”错误。详细步骤
这是我的代码:
0 19 * * * cd /Users/user/Desktop/Project && source /Users/user/Desktop/Project/venv/bin/activate && python command arg
python脚本
from datetime import datetime
import boto # check wheather its taking the virtualenv or not
import sys
param1=sys.argv[1] #Param
myFile = open('appendtxt.txt', 'a')
myFile.write('\nAccessed on ' + param1+str(datetime.now()))
Cron命令
*/1 * * * * cd /Workspace/testcron/ && /Workspace/testcron/venvcron/bin/python3 /Workspace/testcron/testcronwithparam.py param
在上述命令中
*/1 * * * * -每一分钟执行一次
cd /Workspace/testcron/—python脚本所在路径
/Workspace/testcron/venvcron/bin/python3 - Virtualenv路径
Workspace/testcron/testcronwithparam.py -文件路径
参数-参数