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