Python脚本可以手动运行,但不能使用crontab的可能原因是什么?

2024-06-07 19:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,当我用我的用户(不是root)手动运行它时,它可以工作,但是当我用root crontab调度它时,它不能工作(什么都没有发生)?有人知道是什么情况吗?你知道吗

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

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

Tags: 文件用户脚本文件夹权限网页情况root
3条回答

手动运行脚本和由crontab启动脚本时,脚本的环境不同。 也许你应该检查环境变量。你知道吗

部分问题可能是因为只有folder 1的所有者有写权限。你知道吗

脚本可能在本地、用户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可以作为根用户、特定的cron用户运行,也可以作为单个用户(即,作为您)运行,具体取决于您将条目添加到的crontab,以及cron在系统上的设置方式。除非使用“以用户身份运行”选项,否则在cron控件下执行脚本时,脚本的安全环境和权限可能与脚本所期望的不同。

相关问题 更多 >

    热门问题