linux - 无法在 crontab 中运行 shell 脚本

标签 linux bash shell cron sh

我无法从 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

最佳答案

我在这里看到两个问题:

  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!"
    

关于linux - 无法在 crontab 中运行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52309925/

相关文章:

linux - 剪切命令在 Linux 上不起作用

Linux weka 和大文件

c++ - 凯特安装问题

linux - 我需要一个 Linux 脚本来报告日志文件中的所有错误行,并将错误行的结果导出到 .csv 文件中?

linux - Bash 数量限制?

bash - 按任意键,shell 中显示超时进度

r - 将 system() 输出流式传输到 Shiny 前端(连续)

linux - 减少 Linux 上的性能变化

linux - 多行替换为 sed - Linux/Ubuntu

linux - 如何将行字段重定向到 vars?