我有一个 bash 文件,它只是停止现有的 docker 容器。当我手动运行该脚本时,它工作正常,但它在我的 crontab 上不起作用。我需要在启动电脑时执行 bash 脚本。
Crontab:(启动时不起作用)
@reboot /var/www/airflow/stop_airflow.sh
Bash 内容(stop_airflow.sh)
#!/bin/bash
cd /var/www/airflow && docker-compose stop
终端执行:
bash /var/www/airflow/stop_airflow.sh
输出:
Stopping airflow_airflow-worker_1 ... done
Stopping airflow_flower_1 ... done
Stopping airflow_airflow-webserver_1 ... done
Stopping airflow_airflow-scheduler_1 ... done
Stopping airflow_redis_1 ... done
Stopping airflow_postgres_1 ... done
答案1
运行的作业cron
不会在与桌面相同的运行时环境中运行。您的任何PATH
更改或其他环境变量设置都~/.bashrc
不会自动传播到您的cron
作业。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(阅读man xhost
)。在您的例子中,您的脚本可能正在寻找,但未docker-compose
在您的中找到$PATH
。
cron
人们可以在crontab
文件 Read中为所有作业设置环境变量man 5 crontab
。
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。