Python脚本可以手动运行而不是crontab运行的可能原因?

时间:2014-11-24 15:57:06

标签: python permissions crontab

我有一个python脚本,当我用我的用户(不是root)手动运行它时,但是当我使用root crontab计划它时没有(没有任何反应)吗?有人知道那是什么情况吗?

脚本从某个网页下载文件,然后将其放入“文件夹1”,然后将其移动到“文件夹1”中的新文件夹“文件夹2”。权限:

drwxr-sr-x folder 1 
drwxrwsr-x folder 2

3 个答案:

答案 0 :(得分:2)

脚本可能在本地,您的用户ID,目录中运行,并且在cron等守护程序下无法成功运行,有许多原因。这是主要的,按可能性(和修复的容易程度)的顺序:

  1. 位置差异。 cron从与您不同的位置运行您的脚本。通常类似于/var/spool/cron/var/spool/cron/crontabs/etc/crontab/etc/cron.d。并且它通常使用非常多的PATH变量来自动搜索可执行文件(有关更多信息,请参阅“环境差异”)。因此,最好在crontab条目中为脚本提供非常明确的绝对路径。如果你在脚本中使用shebang行(例如#!python),那么最好在那里使用绝对路径(例如#!/usr/bin/python或者which python告诉你的是正确的路径) 。这是“绝对的!”命令扩展到脚本尝试打开或操作的任何文件路径。不要使用相对文件路径,因为从cron运行时,它们不会与您自己运行脚本时的相同位置相关。

  2. 环境差异。如果您的脚本或其任何支持模块需要以某种方式设置某些environment variables(通常是为了提供要执行的程序的路径,要运行的数据库或其他服务的凭据或其他配置信息),从cron运行时,这些变量的设置方式不一定相同。你需要知道这些变量是什么,并明确地设置它们(来自crontab,在你为cron运行主脚本而编写的“前端脚本”中,或者脚本本身)。

  3. 安全性差异。 cron既可以作为root用户运行,也可以作为特定cron用户运行,也可以作为单个用户运行(例如,与您一样),具体取决于您添加条目crontab的内容以及系统上cron的设置方式。除非您使用“以用户身份运行”选项,否则在cron控件下执行脚本时的安全环境和权限可能与脚本所期望的不同。

答案 1 :(得分:1)

部分问题可能是只有folder 1的所有者才具有写入权限。

答案 2 :(得分:0)

当您手动运行脚本以及由crontab启动脚本时,脚本具有不同的环境。 可能是你应该检查环境变量。