Cron Job 未在 Ubuntu 20.04.2 LTS 上运行

Cron Job 未在 Ubuntu 20.04.2 LTS 上运行

我创建了一个 Cron 作业来运行一个脚本,该脚本检查某个进程是否正在运行,如果运行,则打印出该进程正在运行,如果没有运行,则打印出该进程未运行并重新启动该进程:

#!/bin/sh

SERVICE="start_server.py"
if ps -ef | grep "$SERVICE" | grep -v grep >/dev/null
then
    echo "start_server.py is running"
else
    echo "start_server.py stopped"
    python2.7 start_server.py &
fi

以 Ubuntu 用户身份运行以下命令创建了以下 cron 任务:crontab -e

* * * * * /home/ubuntu/mislaka/check_process.sh 2>&1 /home/ubuntu/mislaka/script_log.log

由于某种原因,它无法工作或将输出写入日志文件。

尝试重新启动 cron 服务,尝试以 root 身份创建 cron 作业,更改所有权限和运行脚本的用户,但没有任何效果。

如果我单独运行该脚本,它将按预期工作。

Ubuntu 版本:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

提前致谢

答案1

通过 运行的作业cronsystemd启动脚本不会在与桌面相同的运行时环境中运行。systemd启动脚本以 运行root。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于command该行的一部分crontab默认由 解释/bin/sh,其语法比 更简单/bin/bash,因此我建议command调用一个bash脚本(可执行、已安装、以 开头#!/bin/bash)来设置环境,然后调用所需的程序。

答案2

问题是我需要更改我的脚本并编辑 cron 作业以运行正确的脚本并添加脚本的完整路径。

答案3

你可以这样检查:

  1. 第一次运行service cron status来检查状态。

  2. 每分钟向 mycommand.log 文件写入测试字符串以检查 cron 是否正常工作。
    运行crontab -e并在末尾添加以下内容: */1 * * * * echo test > /tmp/mycommand.log 2>&1 保存并关闭然后检查 /tmp/mycommand.log 文件中的内容。

  3. 更改时间或时区后,重新启动 cron 服务,以确保 cron 按时运行。运行service cron restart

相关内容