Làm thế nào để viết một tệp đơn vị dịch vụ systemd để nó chờ cho đến khi một giao diện cụ thể được bật lên trước khi bắt đầu?


14

Tôi đang cố gắng viết một tập tin đơn vị cho hostapd trên Debian.

Trình nền của hostapd dường như cần giao diện cho giao diện Wifi được liên kết để khởi động trước khi nó được chạy hoặc nếu không nó là SEGV.

Tôi đã thử mạng-online.target, nhưng vẫn nhận được SEGV. Tôi nghĩ điều này là do network-online.target chỉ cần thấy BẤT K interface giao diện nào và các giao diện khác xuất hiện trước khi giao diện Wifi sẵn sàng để hostapd hoạt động.

Cách tốt nhất để có một dịch vụ chờ đợi một giao diện cụ thể được bật lên trước khi bắt đầu là gì?

Câu trả lời:


15

Kể từ systemd 219, bạn có thể sử dụng systemd-networkd-wait-onlinetrực tiếp công cụ của systemd , với một --interfacetham số để chỉ định giao diện chờ. Ví dụ:

ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE

Tuy nhiên có một lời cảnh báo. Công cụ này cần systemd-networkdphải được chạy, ngay cả khi nó không làm gì trong cấu hình của bạn. Mặt khác, bắt đầu với cùng một hệ thống 219, systemd-networkdcó thể kích hoạt ổ cắm và tự động thoát khi không hoạt động. Vì vậy, tất cả mọi thứ bạn cần là kéo vào ổ cắm của nó.

Đặt tất cả lại với nhau, sửa đổi tệp đơn vị sẽ trông như thế này (được $IFACEthay thế bằng giao diện mong muốn của bạn):

[Unit]
Requires=systemd-networkd.socket
After=systemd-networkd.socket
...

[Service]
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
ExecStart=/usr/bin/hostapd ...
...

1
Vâng, đây chính xác là những gì tôi muốn. Thật không may, tôi bị kẹt trên Debian 4.6.3 với systemd 44, vì vậy không thể sử dụng nó. Bất kỳ ý tưởng về cách làm cho nó hoạt động trên nền tảng này? Cảm ơn!
bigjosh

2
@bigjosh, bạn luôn có thể làm một cái gì đó như perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'trong ExecStartPre của bạn
Stéphane Chazelas
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.