Kiểm tra nếu postfix đang chạy


8

Tôi đang tìm kiếm một cách đáng tin cậy để kiểm tra nếu postfixđang chạy từ bên trong tập lệnh bash.

Nỗ lực đầu tiên của tôi chỉ đơn giản là cố gắng pidof postfix, mà không hiệu quả.

Sau đó, tôi đã cố gắng để có được 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

Nhưng ngay cả khi trạng thái được báo cáo cho bàn điều khiển, resultbiến vẫn trống. Đây là đầu ra giao diện điều khiển:

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

Cuối cùng tôi đã tìm thấy một cách để kiểm tra xem postfix có đang chạy hay không bằng cách lấy tên tiến trình của nó PID: 11996, đó là "master". Vì vậy, sau đây không hoạt động:

pidof master

Nhưng điều này không quá dài dòng và tôi không chắc đây có phải là cách đáng tin cậy để kiểm tra nếu postfixđang chạy hay không.

Vì vậy, câu hỏi của tôi là:

  • Làm thế nào tôi có thể nhận được đầu ra postfix statustừ bên trong một tập lệnh bash? - Có gì tôi đang làm sai ở đó không?
  • Có cách nào đáng tin cậy hơn để kiểm tra nếu postfixđang chạy từ bên trong tập lệnh bash không?

1
Có thể statuskết quả đầu ra để stderr? Cố gắng thêm 2>&1vào status-command. Ngoài ra, bạn có thể sử dụngpgrep postfix
Costas

Tôi đã cố gắng 2>&1nhưng kết quả vẫn trống rỗng. Đáng buồn pgreplà không có tùy chọn vì nó không có sẵn trên hệ thống (một trạm đĩa Synology với DSM 5.1).
Balder


1
ps aux | grep [p]ostfix?
Costas

Cảm ơn @Costas và @garethTheRed - sử dụng psdường như hoạt động. Trên hệ thống DSM pskhông chấp nhận bất kỳ tham số nào khác sau đó w. Nhưng chỉ đơn giản là gọi ps | grep [p]ostfixkhông hoạt động.
Balder

Câu trả lời:


10

Debian hoặc Ubuntu

sudo service postfix status

Xin lỗi tôi mặc dù đó là thiết bị đầu cuối fro
Javo Troya

4

Để kiểm tra xem Postfix có chạy hay không:

sudo /etc/init.d/postfix status

Để bắt đầu Postfix:

sudo /etc/init.d/postfix start

Để dừng hậu tố:

sudo /etc/init.d/postfix stop

1
Tôi có thể gõ postfix startmà không có thông báo lỗi, nhưng khi tôi gõ postfix statusthì thông báo "hệ thống thư Postfix không chạy." Tôi cho rằng nó âm thầm thất bại.
PJ Brunet

1

Một cách đáng tin cậy để kiểm tra nếu postfix đang chạy:

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

Một thay thế về cơ bản là làm như vậy:

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

Lý luận

Sau khi thực hiện một số nghiên cứu khác, hóa ra việc kiểm tra ps | grep [p]ostfixkhông đáng tin cậy chút nào để xác minh xem liệu postfix có đang chạy hay không.

Có vẻ như lý do tại sao /var/packages/MailServer/target/sbin/postfix statuskhông xuất ra bất cứ điều gì hữu ích là bởi vì postfixsử dụng postlognhị phân nội bộ cho đầu ra. Mã có liên quan có thể được tìm thấy trong tập lệnh bash /var/packages/MailServer/target/libexec/postfix-script:

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

Kiểm tra cho mã thoát của postfix statuskhông làm việc tốt trên Mặt khác. Cái postfix-scriptthực sự được gọi là đằng sau hậu trường bởi postfixnhị phân và không thể được gọi trực tiếp. Nhưng may mắn là tập lệnh cũng bao gồm mã để kiểm tra nếu postfixđang chạy:

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
    ;;

Biến $daemon_directoryđược đặt bởi postfixnhị phân gọi . Trên hệ thống của tôi, nó giải quyết /var/packages/MailServer/target/libexec/.


After doing some more research Bạn có thể hỗ trợ yêu cầu của bạn bằng cách cung cấp bằng chứng?
toogley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.