用于在失败时重新连接无线的 Systemd 单元

用于在失败时重新连接无线的 Systemd 单元

我有一个名为 conWlan0.service 的 systemd 服务,它建立 WiFi 连接。现在我想创建另一个单元来定期检查连接。这是一个合理的开始吗?

[Unit]
Description=...
After=conWlan0.service
OnFailure=conWlan0.service

[Service]
Type=simple
ExecStart=/usr/bin/checkWiFi
RestartSec=120
Restart=always

如果一切正确,则 checkWifi 脚本退出 0,否则返回错误代码。有什么建议么?

答案1

如果您希望某些东西定期运行,您应该使用 SystemD 计时器单元。拥有一个不断重新启动的服务单元并不是一个好主意,因为基本上您的系统始终处于降级模式(一个或多个服务无法保持运行)。

更多详细信息可以在此找到堆栈溢出答案, 在里面关于 SystemD 计时器的 Arch Linux wiki在 的手册页中systemd.timer,但其要点如下:

1. 设置检查服务

/etc/systemd/system/checkwifi.service:

[Unit]
Description=...

[Service]
Type=oneshot
ExecSTart=/usr/bin/checkWiFi

2.设置定时启动偶尔检查WiFi

/etc/systemd/system/checkwifi.timer:

[Unit]
Description=Timer for checkWifi
After=conWlan0.service

[Timer]
OnActiveSec=120

[Install]
WantedBy=timers.target

3. 启用并启动定时器单元

systemctl enable --now checkwifi.timer

请注意,启动计时器时,如果conWlan0.service尚未启动,systemctl则会阻塞并等待满足计时器先决条件。

相关内容