我在 Ubuntu 20上使用 django-crontab ( github ) 运行了一个 django 项目。
在 <my_django_app> 目录中我添加了一个 cron.py 文件:
from .models import <my_model>
from datetime import datetime
def remove_stamps():
for stamp in <my_model>.objects.order_by('-stop_date'):
if stamp.can_be_removed():
stamp.delete()
else:
break
def close_stamps():
for stamp in <my_model>.objects.filter(stop_date=None):
stamp.stop_date = datetime.now()
stamp.save()
在设置中:
CRONJOBS = [
('*/4 * * * *', '<my_django_app>.cron.remove_stamps'),
...
]
CRONTAB_LOCK_JOBS = True
我将项目部署如下:
首先使用@root 在命令行中创建一个 <new_user> ,如下所示:
adduser --system --home=/var/opt/<project_name> --no-create-home --disabled-password --group --shell=/bin/bash <new_user>
使用 Nginx 我用这个 <new_user> 使用 gunicorn 运行虚拟环境,如下所示:
[Unit]
Description=<project_name>
[Service]
User=<new_user>
Group=<new_user>
Environment="PYTHONPATH=/etc/opt/<project_name>:/opt/<project_name>"
Environment="DJANGO_SETTINGS_MODULE=settings"
ExecStart=/opt/<project_name>/venv/bin/gunicorn \
--workers=4 \
--log-file=/var/log/<project_name>/gunicorn.log \
--bind=127.0.0.1:8000 --bind=[::1]:8000 \
<project_name>.wsgi:application
[Install]
WantedBy=multi-user.target
接下来,我使用以下方法添加了 django_crontab 作业:
PYTHONPATH=/etc/opt/<project_name>:/opt/<project_name> DJANGO_SETTINGS_MODULE=settings su <new_user> -c "/opt/<project_name>/venv/bin/python3 /opt/<project_name>/manage.py crontab add"
使用以下命令检查 crontab 作业.... crontab show
:
<HASH KEY> -> ('*/4 * * * *', '<my_django_app>.cron.remove_stamps')
<HASH KEY> -> ('*/5 * * * *', '<my_django_app>.cron.close_stamps')
journalctl _COMM=cron --since="2021-5-1 14:00"
用于检查作业是否运行,给出以下内容:
...
May 01 17:00:01 ubuntu-2gb-hel1-2 CRON[276942]: pam_unix(cron:session): session opened for user <new_user> by (uid=0)
May 01 17:00:01 ubuntu-2gb-hel1-2 CRON[276940]: pam_unix(cron:session): session opened for user <new_user>by (uid=0)
May 01 17:00:01 ubuntu-2gb-hel1-2 CRON[276946]: (<new_user>) CMD (/opt/<project_name>/venv/bin/python3 /opt/<project_name>/manage.py crontab run <HASH KEY>>
May 01 17:00:01 ubuntu-2gb-hel1-2 CRON[276947]: (<new_user>) CMD (/opt/<project_name>/venv/bin/python3 /opt/<project_name>/manage.py crontab run <HASH KEY>>
May 01 17:00:08 ubuntu-2gb-hel1-2 CRON[276945]: pam_unix(cron:session): session closed for user <new_user>
May 01 17:00:08 ubuntu-2gb-hel1-2 CRON[276942]: pam_unix(cron:session): session closed for user <new_user>
...
我知道 cronjob 运行正常但没有执行脚本。但我不知道如何解决。我完全被困住了。欢迎所有帮助。
我还尝试使用 添加 cronjob crontab -e
,但后来我陷入了如何在 virtualenv 中使用 <new_user> 的问题。