【问题标题】:Running a bash script from a cronjob fails with "No such file or directory"从 cronjob 运行 bash 脚本失败并显示“没有这样的文件或目录”
【发布时间】:2018-01-26 08:55:36
【问题描述】:

我正在尝试运行以下 bash 脚本,该脚本在激活 conda 环境后运行 Python 程序。

send.bash

#!/bin/bash
source activate manage_oam_users
python ~/path/to/script/send.py
source deactivate

crontab

30 * * * * source /path/to/script/send.bash

我从 cron 收到以下错误,尽管运行 source send.bash 可以完美运行。我也尝试过使用bash send.bash,它在手动运行时工作正常,但在从 cron 运行时会导致相同的错误。

/path/to/script/send.bash: line 2: activate: No such file or directory

【问题讨论】:

    标签: python bash shell cron anaconda


    【解决方案1】:

    另外,目录可以定义为自动添加

    script_dir=$(dirname $0)
    
    #file_imports
    source $script_dir"/functions.sh"
    

    【讨论】:

      【解决方案2】:

      activatedeactivate 可能是位于$PATH 变量中的条目所指向的某处的脚本。通常,为一位用户在本地安装的软件会在您的 .profile 文件或 .bashrc 中添加扩展您的 $PATH 变量的语句,这样您就可以在不使用完整路径的情况下使用该软件的脚本。

      当您的 bash 自动加载 .profile.bashrc 时,CRON 不会这样做。对此至少有两种解决方案

      A) 无处不在的完整路径

      您可以在 CRON 作业执行的脚本中使用完整路径,如下所示:

      #!/bin/bash
      source /path/to/activate manage_oam_users
      python $HOME/path/to/script/send.py
      source /path/to/deactivate
      

      同时使用$HOME 代替~。您可以在 shell 中使用 which activatewhich deactivate 找出完整路径。

      B) 来源 .profile.bashrc

      或者,您可以在 CRON 选项卡中获取您的 .profile(或 .bashrc;您必须查看哪个文件使用 anaconda 目录扩展了您的 $PATH 变量):

      30 * * * * source $HOME/.profile; source /path/to/script/send.bash
      

      补充:来源是什么意思?

      source 是一个 Unix 命令,它评估命令后面的文件,作为在当前上下文中执行的命令列表。

      ——from Wikipedia, the something something great encyclopaedia

      source 命令的常用别名是单点 (. /path/to/script)。

      A related, but more generic question can be found on the UNIX and Linux Stack Exchange.

      【讨论】:

        【解决方案3】:

        由于 cron 不是从安装 anaconda 的目录运行,所以无法找到 activate。此外,您的路径似乎缺少根 anaconda 目录。 找到激活命令的位置并将其添加到您的 PATH 中。

        which activate
        /Users/username/anaconda/bin/activate
        

        在你的 bash_profile 添加

        export PATH="/Users/username/anaconda/bin:$PATH"
        

        【讨论】:

          猜你喜欢
          • 2020-02-12
          • 1970-01-01
          • 2017-06-16
          • 1970-01-01
          • 2020-05-09
          • 2017-08-06
          • 2017-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多