想要以特定用户 (xfeautomation) 和 python 虚拟环境的身份运行每小时的 cron 作业。以特定用户身份运行,我是否必须将脚本位置添加到 PATH 中?我当前的 cron 作业如下所示:
0 * * * * xfeautomation /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
这是正确或最佳的方法吗?TIA
答案1
切换到该用户。
sudo su - xfeautomation
跑步
crontab -e
会出现一个带有空文件的文件编辑器。在其中添加不带用户名的工作并保存。
0 * * * * /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
确认:
sudo su - xfeautomation
crontab -l
或者
sudo crontab -u xfeautomation
答案2
以特定用户身份运行,我是否必须将脚本位置添加到 PATH 中?
当您使用绝对路径时,通常不需要修改 PATH 环境变量,例如您现在所做的/opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
作为系统管理员,您可以通过多种方式创建以不同用户 ID 运行的计划批处理作业:
正如解释的那样这个答案:为该用户设置个人 crontab。个人 crontab 中的作业将始终在其所有者的用户 ID 下运行。
请注意,当您作为管理员为另一个用户设置个人 crontab 时,该用户将能够修改和删除该 cron 作业规范,从而撤销您的工作。或者你也可以从系统 crontab 安排系统作业。系统 crontab(通常
/etc/crontab
和/或 中的插入文件/etc/cron.d/
)由 root 拥有,非特权用户无法修改。系统 crontab 中的作业规范支持个人 crontab 文件中不存在的额外字段:字段 #6 需要用户名,例如xfeautomation
将用于执行作业的用户 ID。
您发布的语法对于 中的条目/etc/crontab
或插入文件(如/etc/cron.d/wf_api_linux
0 * * * * xfeautomation /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
由于您记录了所有输出和错误,因此不必担心,但通常情况下,当您设置系统 crontab 时,cron 会将标准输出和错误通过电子邮件发送给 root,而当您使用个人 crontab 时,则直接发送给用户。
据我所知,这两种方法实际上都会产生相同的工作条件,除了对工作规范和电子邮件的所有权的担忧之外,它们是等效的。