我有一个名为 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
则会阻塞并等待满足计时器先决条件。