代码之家  ›  专栏  ›  技术社区  ›  Gert Gottschalk

cron在文件系统的何处启动命令

  •  0
  • Gert Gottschalk  · 技术社区  · 5 年前

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

    假设我有一个python脚本:

    import sys
    
    filepath = sys.argv[1]
    try:
        fp= open(filepath)
        ... stuff ...
    except:
        print ("File not found.")
    

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

    文件“filename”位于/home/me/scripts中。这给了我“找不到文件”的信息。很明显,我的脚本是在其他地方启动的,而不是在/home/me/scripts。但是在哪里呢?我可以将绝对路径放到crontab中,但是当给定多个参数时,会有很多混乱。最好的把戏是什么?

    0 回复  |  直到 5 年前
        1
  •  0
  •   ottomeister    5 年前

    你没说你用的是什么系统,但在我用过的每一个系统上 cron 克朗 crontab

    * * * * * /bin/pwd > $HOME/cron-pwd.txt
    

    cron-pwd.txt 文件以显示在主目录中。很明显,把这条线从你的

    这意味着您的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
    

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

    顺便说一句,你的问题只有 0 2 * * 在crontab行的开头,缺少一个字段。我想那只是复制粘贴错误。而且,它不会调用Python来运行脚本。我假设这也是一个复制粘贴错误或者你的真实脚本有一个错误 #! 调用Python解释器的行。