【问题标题】:Unable to run shell script in crontab无法在 crontab 中运行 shell 脚本
【发布时间】:2019-02-17 23:10:25
【问题描述】:

我无法从 crontab 成功执行脚本。 手动执行脚本时,它工作正常。添加到 crontab 时会报错。

当脚本按如下方式手动执行时,一切正常:

cd /home/admin/git/Repo
./lunchpad2.sh

脚本添加到crontab中如下:

sudo crontab -e
30 13 * * * /home/admin/git/Repo/lunchpad2.sh > /home/admin/git/Repo/outcome.err

lunchpad2.sh 设置了 744 个权限;

脚本本身:

    #!/bin/bash -p
    PATH=$PATH:/home/admin/git/Repo

    echo "--> Starting!"

    echo "--> Stopping docker"
    docker-compose down

    echo "--> Switching files"
    mv dc_conf_standby.py dc_conf_aboutready.py 
    mv dc_conf.py dc_conf_standby.py 
    mv dc_conf_aboutready.py dc_conf.py 

    echo "--> Building docker"
    docker-compose up -d --build

    echo "--> Completed!"

产生的错误:

/home/admin/git/Repo/lunchpad2.sh: line 7: docker-compose: command not found
mv: cannot stat ‘dc_conf_standby.py’: No such file or directory
mv: cannot stat ‘dc_conf.py’: No such file or directory
mv: cannot stat ‘dc_conf_aboutready.py’: No such file or directory
/home/admin/git/Repo/lunchpad2.sh: line 15: docker-compose: command not found

【问题讨论】:

    标签: linux bash shell cron sh


    【解决方案1】:

    我在这里看到两个问题:

    1. 您需要在脚本或 cron 作业中执行 cd。 Cron 在您的主目录中运行该命令。您可以回显“$PWD”进行确认。

    2. 需要指定docker-compose可执行路径(运行“which docker-compose”确认)

      #!/bin/bash -p
      cd /home/admin/git/Repo
      
      echo "--> Starting!"
      
      echo "--> Stopping docker"
      /usr/bin/docker-compose down
      
      echo "--> Switching files"
      mv dc_conf_standby.py dc_conf_aboutready.py 
      mv dc_conf.py dc_conf_standby.py 
      mv dc_conf_aboutready.py dc_conf.py 
      
      echo "--> Building docker"
      /usr/bin/docker-compose up -d --build
      
      echo "--> Completed!"
      

    【讨论】:

    • 哪个docker-compose返回“/usr/local/bin/docker-compose”,但是docker-compose构建的配置文件在/home/admin/git/Repo/中
    • Cron 在你的主目录中运行你的命令。您必须在脚本中 cd,或者在 cron 作业中 cd “cd /home/admin/git/Repo && ./lunchpad2.sh > /home/admin/git/Repo/outcome.err”
    • 我发现conf文件可以作为参数传递 - "/usr/local/bin/docker-compose/docker-compose -f /home/admin/git/Repo/docker-compose .yml 向下"
    • 它现在给出的错误是“/home/admin/git/Repo/lunchpad.sh: line 8: /usr/local/bin/docker-compose/docker-compose: Not a directory / home/admin/git/Repo/lunchpad.sh:第 16 行:/usr/local/bin/docker-compose/docker-compose:不是目录”
    • 为什么会有 /docker-compose/docker-compose?它给出“不是目录”,因为 docker-compose 的第一层是可执行文件。
    最近更新 更多