为什么可以手动运行Python脚本,但不能使用crontab运行?
我有一个python脚本,当我用我的用户(不是root)手动运行它时,它的工作原理是当我使用root crontab安排它时没有(没有任何反应)?有谁知道这是什么情况?为什么可以手动运行Python脚本,但不能使用crontab运行?
脚本从某个网页下载文件,然后将其放入“文件夹1”,然后将其移动到“文件夹1”内的新文件夹“文件夹2”。许可:问题的
drwxr-sr-x folder 1
drwxrwsr-x folder 2
有很多原因脚本可能会为你在本地运行,你的用户ID下,在您的目录,而不是一个守护下成功运行像cron
。以下是主要的,在可能的顺序(和缓解固定的):
位置的差异。
cron
从与您不同的位置运行脚本。通常类似/var/spool/cron
,/var/spool/cron/crontabs
,/etc/crontab
或/etc/cron.d
。它通常运行非常多的变量以自动搜索可执行文件(有关更多信息,请参阅“环境差异”)。因此,最好在crontab
条目中为脚本提供一条非常明确的绝对路径。如果你在你的脚本中使用了shebang行(例如#!python
),那么最好还是使用绝对路径(例如#!/usr/bin/python
或任何which python
告诉你是正确的路径)。这是“绝对的!”诫命延伸到脚本试图打开或操纵的任何文件路径。不要使用相对文件路径,因为从cron
运行时,它们不会与您自己运行脚本时的相同位置相关。环境差异。如果您的脚本或其任何支持模块需要以某种方式(通常为要执行的程序提供路径,要运行的数据库或其他服务的凭证或其他配置信息)设置某些environment variables,则这些变量是当你从
cron
运行时不太可能以相同的方式设置。您需要明确指出这些变量是什么,并且要么明确地设置它们(从crontab
开始,在您编写的“前端脚本”中,仅用于从cron
运行主脚本,或者在脚本中)。安全性差异。
cron
可以作为根用户,作为特定的cron
用户运行,也可以作为单个用户(即您)运行,具体取决于您添加条目的crontab
以及您的系统上如何设置cron
。除非您使用“以用户身份运行”选项,否则脚本在cron
控件下执行时的安全环境和权限可能与您的脚本所期望的不同。
部分原因可能是,只有folder 1
主人有写权限。
你的意思是因为s?我怎么能改变它?因为我已经尝试过sudo chmod g + x
尝试'g + w'来更改(w)仪式权限。 – 2014-11-24 16:04:25
(g)群组权限不会执行它,除非cron作为同一群组中的用户运行。 – 2014-11-24 16:05:31
脚本具有不同的环境,当您手动运行它时以及它由crontab启动时。 也许你应该检查环境变量。
定义“不起作用”。 – 2014-11-24 15:59:37