让 cron 检查 bash 脚本是否正在执行

让 cron 检查 bash 脚本是否正在执行

我有一个 bash 脚本,用户可以使用while do它来sleep不断监视连接状态并在出现问题时采取措施。唯一不受保护的是检查脚本本身的执行。

我希望myscript.sh通过 init.d 条目在启动时执行,然后每分钟执行一次 CRON 任务,以查看我在启动时自动运行的脚本是否仍在执行。我怎样才能实现这个目标?

答案1

使用现代 init 系统(如 systemd 或 upstart),您可以让 init 系统在脚本失败时负责重新启动脚本。

如果由于某种原因您无法使用旧系统,您可以让脚本定期更新标志文件 ( touch /var/lib/myapp/flagfile),然后通过 cron 检查标志文件是否早于一定秒数,并在必要时重新启动脚本。就像是:

# get current time (in seconds since the epoch)
now=$(date +%s)

# get flag file mtime (in seconds since the epoch)
last_update=$(stat --printf '%Y' /var/lib/myapp/flagfile)

if [ $(( now - last_update )) -gt $interval ]; then
    restart_script_here
fi

使用系统

如果你有 systemd 可用,你只需创建一个.service. unit with theRestart=always key, which instructs systemd to restart the script whenever it fails. E.g., put something like this in/etc/systemd/system/myscript.service`:

[Unit]
Description=This is my nifty service.
# Put any dependencies here

[Service]
Type=simple
ExecStart=/path/to/myscript
Restart=always

[Install]
WantedBy=multi-user.target

然后使用以下命令激活它:

# systemctl enable myscript
# systemctl start myscript

使用计划任务

您可以不运行持久脚本,而只需运行常规 cron 作业来执行任何必要的检查和补救。您将被限制为每分钟检查一次,但如果该频率可以接受,这可能是一个更简单的解决方案。

相关内容