我有一个python脚本,当我用我的用户(不是root)手动运行它时,但是当我使用root crontab计划它时没有(没有任何反应)吗?有人知道那是什么情况吗?
脚本从某个网页下载文件,然后将其放入“文件夹1”,然后将其移动到“文件夹1”中的新文件夹“文件夹2”。权限:
drwxr-sr-x folder 1
drwxrwsr-x folder 2
答案 0 :(得分:2)
脚本可能在本地,您的用户ID,目录中运行,并且在cron
等守护程序下无法成功运行,有许多原因。这是主要的,按可能性(和修复的容易程度)的顺序:
位置差异。 cron
从与您不同的位置运行您的脚本。通常类似于/var/spool/cron
,/var/spool/cron/crontabs
,/etc/crontab
或/etc/cron.d
。并且它通常使用非常多的PATH
变量来自动搜索可执行文件(有关更多信息,请参阅“环境差异”)。因此,最好在crontab
条目中为脚本提供非常明确的绝对路径。如果你在脚本中使用shebang行(例如#!python
),那么最好在那里使用绝对路径(例如#!/usr/bin/python
或者which python
告诉你的是正确的路径) 。这是“绝对的!”命令扩展到脚本尝试打开或操作的任何文件路径。不要使用相对文件路径,因为从cron
运行时,它们不会与您自己运行脚本时的相同位置相关。
环境差异。如果您的脚本或其任何支持模块需要以某种方式设置某些environment variables(通常是为了提供要执行的程序的路径,要运行的数据库或其他服务的凭据或其他配置信息),从cron
运行时,这些变量的设置方式不一定相同。你需要知道这些变量是什么,并明确地设置它们(来自crontab
,在你为cron
运行主脚本而编写的“前端脚本”中,或者脚本本身)。
安全性差异。 cron
既可以作为root用户运行,也可以作为特定cron
用户运行,也可以作为单个用户运行(例如,与您一样),具体取决于您添加条目crontab
的内容以及系统上cron
的设置方式。除非您使用“以用户身份运行”选项,否则在cron
控件下执行脚本时的安全环境和权限可能与脚本所期望的不同。
答案 1 :(得分:1)
部分问题可能是只有folder 1
的所有者才具有写入权限。
答案 2 :(得分:0)
当您手动运行脚本以及由crontab启动脚本时,脚本具有不同的环境。 可能是你应该检查环境变量。