在 Bash 中监控 perl 脚本的脚本失败

在 Bash 中监控 perl 脚本的脚本失败

ASSP 的作者向我发送了一个简单的监控脚本,但我不知道如何修复导致错误的 PROC= 行。

#!/bin/bash
# ASSP watchdog process.

#
# Start in the correct directory.
BASE=/usr/share/assp/
cd $BASE

# Check for a running ASSP process.
PROC=`ps -axvO ucomm | grep Schedule::Cron | grep perl | awk '{print $1}'`

FILES=`lsof -p "${PROC}" | grep /usr/share/assp | grep perl`

# If ASSP is not running, start it.
if [ "${FILES}" ]
then {
echo "ASSP is already running."
}
else {
echo "Restarting ASSP."
perl assp.pl
} fi

它出现以下错误。

ERROR: Must set personality to get -x option.

我不确定这条线是否接近工作状态。我正在考虑编写一个脚本,它只是检查是否有 perl assp.pl 脚本处于活动状态,如果没有,则手动启动它。此服务器运行 Debian 并安装了 ASSP/Postfix。

答案1

部分问题在于ps它有十几个版本,Linux 的 ps 会尝试通过找出您要使用的版本选项来与所有版本兼容。以 开头的选项-是 BSD 样式,但 -v 和 -O 是冲突的 BSD 选项。

尝试ps ax获取当前正在运行的所有进程的命令列。由于您在管道中使用它,因此应该使用整个命令名称,但如果出于某种原因它截断了命令行,则使用axww无限宽度。

相关内容