![从 cronjob 中将 py 脚本作为 www-data 运行失败,但通过终端作为命令运行则有效](https://linux22.com/image/882973/%E4%BB%8E%20cronjob%20%E4%B8%AD%E5%B0%86%20py%20%E8%84%9A%E6%9C%AC%E4%BD%9C%E4%B8%BA%20www-data%20%E8%BF%90%E8%A1%8C%E5%A4%B1%E8%B4%A5%EF%BC%8C%E4%BD%86%E9%80%9A%E8%BF%87%E7%BB%88%E7%AB%AF%E4%BD%9C%E4%B8%BA%E5%91%BD%E4%BB%A4%E8%BF%90%E8%A1%8C%E5%88%99%E6%9C%89%E6%95%88.png)
所以,我有这个需要每分钟运行一次的脚本,所以我设置了一个 cronjob 来运行该脚本,假设命令是:
/var/www/script.py
我使用 Webmin 设置 cronjob 并将其设置为以 www-data 形式执行。我还使用它来查看运行命令时的输出。
当我执行 cronjob 时,尝试创建文件时出现权限错误。但当我运行以下命令时,它就可以正常工作。
sudo -u www-data /var/www/script.py
谁能告诉我为什么?
更新
它尝试创建的文件被称为runnning.txt
并放置在脚本旁边(/var/www/running.txt
)
该命令作为 cronjob 运行时生成的错误
Traceback (most recent call last):
File "/var/www/lager-scanner/filer/pluk_script.py", line 237, in <module>
with open(filename, "w+") as f:
PermissionError: [Errno 13] Permission denied: 'running.txt'
的内容/etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
输出sudo -u www-data crontab -l
# * * * * * /var/www/script.py
我不知道 webmin 是如何工作的。它是一个 web 界面,我只需选择应该由哪个用户运行该命令即可。