原因可能是什么?为什么它不起作用?如何解决?
我有一个“安装程序”和几个其他“固件”服务,它们已注册到 systemd,通常在 Linux 启动时启动。通常“安装程序”服务在其脚本中没有任何操作。
安装服务:
[Unit]
Description=INSTALLER
Before=network-pre.target
[Service]
ExecStart=/opt/product/sbin/do-installer.sh
StandardOutput=journal+console
Type=oneshot
[Install]
WantedBy=multi-user.target
典型的固件服务:
[Unit]
Description=Firmware
Wants=network.target multi-user.target systemd-hostnamed.service connman.service installer.service
After=network.target multi-user.target systemd-hostnamed.service connman.service installer.service
[Service]
ExecStart=/opt/product/sbin/firmware.sh
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
固件更新机制的工作方式是,在启动过程中,“安装程序”服务有时会检测到有事要做,然后它会立即调用其固件更新脚本,该脚本会在网络启动之前执行并完成。固件更新意味着卸载并安装固件服务。
我遇到的问题是,重新安装后固件服务无法启动。我总是必须重新启动才能启动新安装的固件。我不明白原因。
答案1
现在我找到了一个解决方案:我的脚本 do-installer.sh 不仅要调用
opkg install ... all the stuff ...
systemctl start firmware1.service &
systemctl start firmware2.service &
...
systemctl start firmwareN.service &
此外,这两个命令也解决了我的问题:
systemctl daemon-reload
systemctl reset-failed