Điểm:0

Dịch vụ báo cáo Systemctl không thành công sau khi người dùng khởi động lại Apache theo cách thủ công. Systemd và thực tế có thể được đồng bộ hóa mà không cần khởi động lại quy trình không?

lá cờ ir

Tôi có một phiên bản Apache bắt đầu bằng một đơn vị systemd. Một người dùng đã dừng và khởi động lại phiên bản theo cách thủ công. Bây giờ systemctl báo cáo dịch vụ là "không thành công". Ngoài việc dừng và khởi động lại Apache, có cách nào để systemd nhận ra dịch vụ đang chạy không?

Đây là trạng thái. (Tôi đã cố giấu thông tin công ty, nên nếu httpd-ApacheINT-1 không có nghĩa, đó là vì tôi đã loại bỏ một phần của chuỗi ký tự.)

$ systemctl status httpd-apache-int-1.service
* httpd-apache.service - Máy chủ HTTP Apache cho Phiên bản INT-1
   Đã tải: đã tải (/usr/lib/systemd/system/httpd-apache-int-1.service; đã bật; giá trị đặt sẵn của nhà cung cấp: đã tắt)
   Hoạt động: không thành công (Kết quả: mã thoát) kể từ Thứ Tư 2022-05-04 15:56:39 CDT; 2 ngày trước
     Tài liệu: man:httpd(8)
           người đàn ông:apachectl(8)
 PID chính: 26914 (mã=đã thoát, trạng thái=0/THÀNH CÔNG)

Đây là tập tin đơn vị của tôi.

$ systemctl mèo httpd-apache-int-1.service
# /usr/lib/systemd/system/httpd-apache-int-1.service
[Đơn vị]
Mô tả=Máy chủ HTTP Apache cho Phiên bản INT-1
Sau=mạng.đích từ xa-fs.đích nss-lookup.đích
Tài liệu=man:httpd(8)
Tài liệu = người đàn ông: apachectl (8)

[Dịch vụ]
Loại = rẽ nhánh
# ExecStart không phải là "cách systemd" để thực hiện mọi việc.
# Có thể có vấn đề với những thứ như chạy nhiều hơn
# hơn một "systemctl ACTION httpd-apache-int-1"
#   tại một thời điểm. Nhưng sử dụng Môi trường (Tệp) và
# systemd ghi đè không làm những gì tôi muốn.
ExecStart=/bin/sh -c '\
   nguồn /etc/sysconfig/httpd.int-1 ; \
   nguồn /opt/ca/webagent/ca_wa_env.sh ; \
   nguồn /opt/apache/etc/int-1/WebAgent.conf ; \
   /usr/sbin/httpd $ TÙY CHỌN ; \
   thoát 0'
ExecReload=/bin/kill -USR1 ${MAINPID}
ExecStop=/bin/kill -WINCH ${MAINPID}
# Chúng tôi muốn systemd cho httpd một chút thời gian để hoàn thành một cách nhẹ nhàng, nhưng vẫn muốn
# nó sẽ tắt httpd sau TimeoutStopSec nếu xảy ra sự cố trong quá trình
# duyên dừng lại. Thông thường, Systemd gửi tín hiệu SIGTERM ngay sau
# ExecStop, sẽ giết httpd. Chúng tôi đang gửi SIGCONT vô dụng ở đây để cung cấp
# httpd thời gian để kết thúc.
KillSignal=SIGCONT
RiêngTmp=true

[Cài đặt]
WantedBy=multi-user.target

Đây là những tiến trình đang chạy.

$ ps -ef | grep [i]nt-1
apache 1030 27237 0 14:30 ? 00:00:01 /usr/sbin/httpd -k start -f /opt/Apache/etc/int-1/httpd.conf
apache 3291 27237 0 tháng 505 ? 00:00:12 /usr/sbin/httpd -k bắt đầu -f /opt/Apache/etc/int-1/httpd.conf
apache 9974 27237 0 tháng 505 ? 00:00:15 /usr/sbin/httpd -k bắt đầu -f /opt/Apache/etc/int-1/httpd.conf
root 27237 1 0 May04 ? 00:00:05 /usr/sbin/httpd -k start -f /opt/Apache/etc/int-1/httpd.conf
apache 27239 1 0 tháng 504 ? 00:07:00 LLAWP /opt/apache/etc/int-1/WebAgent.conf -APACHE24
apache 27261 27237 0 tháng 504 ? 00:00:41 /usr/sbin/httpd -k start -f /opt/Apache/etc/int-1/httpd.conf
apache 27262 27237 0 tháng 504 ? 00:00:37 /usr/sbin/httpd -k start -f /opt/Apache/etc/int-1/httpd.conf

Thông tin khác có thể hữu ích.

apache
Phiên bản máy chủ: Apache/2.4.6 (Red Hat Enterprise Linux)

hệ điều hành
Bản phát hành Red Hat Enterprise Linux Server 7.9 (Maipo)

$ systemctl --version
hệ thống 219
user10489 avatar
lá cờ nc
câu trả lời ngắn gọn: Không, nhưng bạn cũng có thể bỏ qua nó. Nhưng tại sao không khởi động lại nó?
Marco avatar
lá cờ in
Có thể sử dụng pidfile mà systemd giám sát?
Marco avatar
lá cờ in
Có thể là do sự khởi động phức tạp của máy chủ apache, bằng cách nào đó, systemd không thể tìm thấy pid chính xác của quy trình apache chính (ví dụ: sử dụng pid của "/bin/sh")?
iAmJeff avatar
lá cờ ir
@ user10489 Hệ thống sản xuất. Khởi động lại cần phải được sự chấp thuận của các bên liên quan. Về "Câu trả lời ngắn gọn: Không" Dang. Tôi đã hy vọng sẽ có một số thủ thuật systemd.
iAmJeff avatar
lá cờ ir
@Marco Tệp pidfile là tệp được xác định trong httpd.conf, do đó, nó "nên" giống nhau. Tôi nhớ đã thấy rằng PID thực sự khớp với quy trình man khi thực hiện "ps -ef | grep [a]pache"
Marco avatar
lá cờ in
@iAmJeff systemd có cách xử lý pid riêng. Nó giám sát các quá trình bắt đầu và cố gắng tìm pid. Điều này hoàn toàn độc lập với những gì được viết trong bất kỳ tệp cấu hình nào của httpd.So sánh các pid từ `systemctl status httpd-apache-int-1` với pid của httpd.
iAmJeff avatar
lá cờ ir
@Marco Bạn nói đúng! Nhìn vào dữ liệu trong câu hỏi của tôi, 26914 từ đầu ra trạng thái không khớp với 27237 được liệt kê bởi ps. Có cách nào dễ dàng để đồng bộ hóa điều đó không? (Tôi không muốn chỉnh sửa không gian bộ nhớ của các tiến trình đang chạy.)
Marco avatar
lá cờ in
Bạn đang sử dụng systemd theo cách không hoạt động. Có vẻ như bạn vẫn đang mắc kẹt trong suy nghĩ về `init.d`. Tốt nhất, hãy viết tập lệnh `init.d` cho việc này và để systemd tạo phần còn lại.
iAmJeff avatar
lá cờ ir
@Marco "... hãy để systemd tạo phần còn lại." Bạn có một hoặc hai liên kết với các hướng dẫn về điều đó?
iAmJeff avatar
lá cờ ir
@Marco Về một trong những bài đăng trước đó của bạn, bạn có thể chia sẻ tên hoặc vị trí của (các) pidfile mà systemd giám sát không?
Marco avatar
lá cờ in
Tôi không phải là nhà phát triển systemd, tôi không biết các chi tiết bên trong. Systemd không giám sát các tệp pid trừ khi bạn sử dụng tùy chọn `PIDFile=`. Đối với mỗi tập lệnh `init.d`, systemd sẽ tạo bên trong một dịch vụ giả mà bạn có thể xử lý với `systemctl` theo cách giống như các dịch vụ systemd gốc (xem `man systemd-sysv-generator`). Nếu bạn tạo các dịch vụ systemd phức tạp, bạn phải tìm hiểu hướng dẫn sử dụng systemd (https://www.freedesktop.org/software/systemd/man/). Tôi có thể tạo một câu trả lời giải quyết chính xác vấn đề của bạn, nhưng tốt hơn là bạn nên tìm hiểu nó cho các vấn đề trong tương lai.
Marco avatar
lá cờ in
Trong trường hợp tốt nhất, bạn phải thay đổi một dòng: đặt `exec` trước `/usr/bin/httpd`

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.