测试postfix是否正在运行


8

我正在寻找一种可靠的方法来测试postfixbash脚本中是否正在运行。

我的第一次尝试只是尝试pidof postfix,它不起作用。

然后我试图得到postfix status

POSTFIX_LOCATION=/var/packages/MailServer/target/sbin/postfix # location of postfix
result=`$POSTFIX_LOCATION status`
if [ -z $result ]; then
    echo "Error: No status output from postfix"
elif [[ "$result" == *"is running"* ]]; then
    echo "postfix is running!"
else echo "postfix is not running!"
fi

但是,即使将状态报告给控制台,该result变量仍为空。这是控制台输出:

postfix/postfix-script: the Postfix mail system is running: PID: 11996
Error: No status output from postfix

我终于找到了一种方法,通过获取进程名称PID: 11996“ master” 来测试postfix是否正在运行。所以下面工作:

pidof master

但这不是很冗长,我不确定这是否是测试postfix运行情况的可靠方法。

所以我的问题是:

  • 如何postfix status从bash脚本中获取输出?-我在那里做错了吗?
  • 有没有更好的可靠方法来测试postfixbash脚本中是否正在运行?

1
可能的status输出到stderr?尝试添加2>&1status-command。您也可以使用pgrep postfix
Costas

我尝试过,2>&1但结果仍然是空的。遗憾的pgrep是没有选择,因为它在系统(带DSM 5.1的Synology磁盘站)上不可用。
2015年


1
ps aux | grep [p]ostfix
Costas

感谢@Costas和@garethTheRed-使用ps似乎有效。在DSM系统ps上,除以外,不接受任何其他参数w。但是简单地呼叫ps | grep [p]ostfix确实有效。
2015年

Answers:



4

要检查Postfix是否正在运行:

sudo /etc/init.d/postfix status

要启动后缀:

sudo /etc/init.d/postfix start

要停止后缀:

sudo /etc/init.d/postfix stop

1
我可以键入postfix start而不会显示错误消息,但是键入时postfix status会显示“ Postfix邮件系统未运行”。我想这是无声的失败。
PJ Brunet '02

1

测试后缀是否正在运行的可靠方法:

if /var/packages/MailServer/target/sbin/postfix status; then
    echo "postfix is running!"
else echo "postfix is not running!"
fi

基本上执行相同操作的替代方法:

if /var/packages/MailServer/target/libexec/master -t 2>/dev/null; then
    echo "postfix is not running!"
else echo "postfix is running!"
fi

推理

经过更多研究后,事实证明,测试ps | grep [p]ostfix根本无法验证postfix是否正在运行。

似乎之所以/var/packages/MailServer/target/sbin/postfix status不输出任何有用的原因是因为postfix将内部postlog二进制文件用于输出。相关的代码可以在bash脚本中找到/var/packages/MailServer/target/libexec/postfix-script

LOGGER="$command_directory/postlog -t $MAIL_LOGTAG/postfix-script"
INFO="$LOGGER -p info"

检查的退出代码postfix status做,另一方面做工精细。该postfix-script实际上是所谓的由幕后postfix二进制文件,不能直接调用。但幸运的是,脚本还包含用于测试是否postfix正在运行的代码:

status)
    $daemon_directory/master -t 2>/dev/null && {
        $INFO the Postfix mail system is not running
        exit 1
    }
    $INFO the Postfix mail system is running: PID: `sed 1q pid/master.pid`
    exit 0
    ;;

该变量$daemon_directory由调用postfix二进制文件设置。在我的系统上,它解析为/var/packages/MailServer/target/libexec/


After doing some more research 您可以通过提供证据来支持您的主张吗?
toogley '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.