cron在文件系统中的什么位置启动命令

cron在文件系统中的什么位置启动命令,cron,Cron,当cron在我的用户ID下启动命令时,它实际上在文件系统中的什么位置启动它 假设我有一个python脚本: import sys filepath = sys.argv[1] try: fp= open(filepath) ... stuff ... except: print ("File not found.") 我在crontab中调用脚本: 0 2 * * /home/me/scripts/bla.py filename 文件“filename”位于/hom

当cron在我的用户ID下启动命令时,它实际上在文件系统中的什么位置启动它

假设我有一个python脚本:

import sys

filepath = sys.argv[1]
try:
    fp= open(filepath)
    ... stuff ...
except:
    print ("File not found.")
我在crontab中调用脚本:

0 2 * * /home/me/scripts/bla.py filename

文件“filename”位于/home/me/scripts中。这会给我一条“找不到文件”的消息。显然,我的脚本是在/home/me/scripts之外的其他地方启动的。但是在哪里呢?我可以将绝对路径放入crontab中,但是当给定多个参数时,这会造成很多混乱。最好的诀窍是什么?

您没有说您使用的是什么系统,但在我使用过的每个系统上,cron都会启动作业,并将其当前工作目录设置为用户的主目录。一些系统会在
cron
crontab
的手册页中记录这种行为,但如果它们没有(或者如果您想确定),则很容易检查系统的情况。只需将其添加到您的crontab中:

* * * * * /bin/pwd > $HOME/cron-pwd.txt
然后等待一分钟左右,等待
cron pwd.txt
文件出现在您的主目录中。显然,在读取文件后,从
crontab
中删除该行

这意味着您的crontab命令行可以使用相对于主目录的路径名:

0 2 * * * scripts/bla.py scripts/filename
或者,您可以使用
$HOME
环境变量构建绝对路径:

0 2 * * * $HOME/scripts/bla.py $HOME/scripts/filename
或者,如果重复写入路径不方便,则可以让作业在开始运行将执行实际工作的程序之前更改其自己的工作目录:

0 2 * * * cd $HOME/scripts ; ./bla.py filename
cron
的某些实现具有可能影响初始工作目录的增强功能,例如允许您指定与实际主目录不同的
HOME
环境变量。我不建议使用该功能在特定目录中启动作业,除非您非常确定自己在做什么,因为设置非标准的
$HOME
会对作为作业一部分执行的命令产生意外的副作用


顺便说一句,您的问题在crontab行的开头只有
02**
,缺少一个字段。我想这只是一个复制粘贴错误。此外,它不会调用Python来运行脚本。我假设这也是一个复制粘贴错误,或者您的真实脚本有一个
#行。

可能此cron作业由
root
用户运行,并且
root
没有对您的homedir的权限?