Systemd: làm thế nào để dịch vụ systemd bắt đầu sau khi mạng được kết nối đầy đủ?


12

Lý lịch

Tôi đang viết một tập lệnh đơn giản để chạy trong Raspbain trên Raspberry Pi 2, đơn giản bật đèn LED để cho biết tôi đã sẵn sàng kết nối với SSH từ máy tính để bàn của mình.

Kịch bản không quan trọng ở đây, chỉ đề cập rằng vì tôi sử dụng điều khiển tần suất để tập lệnh đang chạy một vòng lặp vô hạn, để bật và tắt đèn LED thường xuyên. Vì vậy, đây là một ví dụ về dịch vụ đơn giản. Tuy nhiên, ít nhất câu trả lời được chấp nhận của câu hỏi này khuyên tôi nên đặt loại không hoạt động. Vì vậy, tập tin dịch vụ của tôi trông giống như

[Unit]
Description=Turn on LED after SSH is ready

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
Wants=network-online.target
After=network-online.target

Hiệu ứng

Dịch vụ chạy như mong đợi. Tuy nhiên, tôi nhận thấy khi tôi bắt đầu putty trong máy tính để bàn của mình ngay sau khi đèn LED bật dấu nhắc đăng nhập không xuất hiện bất thường. Vì vậy, tôi đã kiểm tra với

$ systemd-analyze plot > output.svg

Kết quả cho thấy

nhập mô tả hình ảnh ở đây

Câu hỏi

Có vẻ như các dịch vụ của tôi bắt đầu không sau đó network-online.target, có gì sai ở đây và làm cách nào để khắc phục?

Câu trả lời:


11

Khi có câu hỏi về chỉ thị systemd, bạn có thể sử dụng man systemd.directivesđể tìm tài liệu được ghi ở đâu. Trong trường hợp này, nó cho thấy rằng After=được ghi lại trong man systemd.unit.

Trong tệp đó, nó cho thấy rằng lệnh After=được liệt kê trong phần "[UNIT] PHẦN TÙY CHỌN", chỉ ra rằng nó thuộc về [Unit]phần của tệp.

Tài liệu tương tự cũng ghi lại các tùy chọn phần [INSTALL] và After=không được liệt kê ở đó.

Nói tóm lại, After=chỉ thị của bạn nằm sai vị trí tệp đơn vị nên nó không có hiệu lực cho đến khi bạn di chuyển nó đến đúng vị trí.


Để rõ ràng, trong trường hợp này "[Đơn vị]" là "[Dịch vụ]", vì đó là tệp dịch vụ.
faho

Một câu trả lời có thể sao chép với các sửa chữa sẽ là cách tốt hơn!
GerardJP

@GerardJP Tốt hơn là dạy một người đàn ông câu cá sau đó cho anh ta ăn một ngày. Khi mọi người biết cách sử dụng tài liệu systemd, họ có thể tìm thấy câu trả lời có thẩm quyền mà không mất thời gian trên StackExchange xem xét tài liệu của bên thứ ba.
Mark Stosberg

11

Đã sửa nó bằng cách sửa đổi dịch vụ như

[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
WantedBy=network-online.target

Vẫn không hoàn toàn hiểu những gì tôi đang làm, nhưng nó hoạt động ngay bây giờ. Bất cứ ai có thể giải thích?

Cập nhật

Câu trả lời này được tạo ra bởi chính tôi trước khi câu trả lời được chấp nhận đến.


Đó là After=chỉ thị phải có trong [Unit]phần. Chỉ có vậy thôi.
Bigon
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.