Vô hiệu hóa tất cả các dịch vụ, ngoại trừ ssh


31

Làm cách nào tôi có thể vô hiệu hóa tất cả các dịch vụ ngoại trừ ssh trên các bản phân phối linux hiện đại (dựa trên systemd)?

Tôi cần phải thực hiện một chế độ bảo trì .

Tất cả các dịch vụ này cần phải ngừng hoạt động:

  • bưu điện
  • hậu tố
  • apache
  • cốc
  • cron
  • dovecot

Nhưng ssh không được tắt, vì điều này được sử dụng để thực hiện các tác vụ trong chế độ bảo trì.

Tất nhiên tôi có thể viết một tập lệnh shell mà lặp lại danh sách các dịch vụ mà tôi muốn vô hiệu hóa. Nhưng điều này có cảm giác như tôi đang phát minh lại thứ gì đó đã tồn tại, nhưng cái mà tôi không biết cho đến bây giờ.


1
Những loại nhiệm vụ? Tại sao bạn cần điều này?
ewwhite

@ user430214 Tôi cập nhật câu hỏi. Tôi đã thêm: Tất nhiên tôi có thể viết một tập lệnh shell mà lặp lại danh sách các dịch vụ mà tôi muốn tắt. Nhưng điều này có cảm giác như tôi đang phát minh lại thứ gì đó đã tồn tại, nhưng cái mà tôi không biết cho đến bây giờ.
guettli

Câu trả lời:


55

Điều này nghe có vẻ giống như runlevels , được thay thế bằng các mục tiêu trong Systemd. Vì vậy, thay vì viết một tập lệnh bắt đầu và dừng danh sách các dịch vụ, bạn có thể tạo một tập lệnh mới maintenance.targetchỉ chứa các dịch vụ cần thiết, như SSH. Tất nhiên, SSH không hoàn toàn hữu ích nếu không có kết nối mạng, vì vậy trong ví dụ này, một đơn giản emergency-net.targetđược sửa đổi để bao gồm SSH.

[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes

Sau đó, bạn có thể vào chế độ bảo trì của mình bằng cách sử dụng

# systemctl isolate maintenance.target

và quay lại

# systemctl isolate multi-user.target

1
Cảm ơn bạn rất nhiều vì câu trả lời này. Nó cho tôi thấy rằng hỏi là hữu ích, ngay cả khi bạn nghĩ rằng không có câu trả lời hay ngoại trừ việc viết một kịch bản shell bẩn. Khẩn cấp
net.target

Chắc chắn là như vậy, vì nó cũng quan tâm đến tất cả các phụ thuộc và bạn không cần cập nhật tập lệnh của mình mỗi khi cài đặt dịch vụ mới.
Esa Jokinen

3

Đầu tiên liệt kê các dịch vụ của bạn và tìm kiếm tên systemd tương ứng của chúng.

Sau đó xây dựng một danh sách và dừng từng thành viên trong danh sách để vào bảo trì, bắt đầu từng thành viên sau khi bảo trì.


5
Tại sao không chỉ sử dụng systemctl isolate?
Chris Xuống
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.