在机器启动时使用哪种 systemd 服务类型我有些代码必须永远保留
which systemd TYPE of service to use at machine start i some code has to stay forever
在系统启动时,使用 systemd 服务,
我想永远启动 bash 到 运行,每 5 秒执行一次操作。
它的代码很简单(do_every_5_segons.sh)
while true
do
{read some JSON from internet} >> $myLogFile 2>&1
sleep 5
done
所以,在我的服务定义中,我写了 (~/.config/systemd/user/r4_start.service )
pi@R4:
[Unit]
Description=R4 start
[Service]
Type=oneshot
RemainAfterExit=yes
Restart=no
WorkingDirectory=/home/pi/tools
ExecStart=/home/pi/tools/r4_start.sh
然后在“r4_start.sh”中,我做了一些跟踪,然后启动我的 bash :
nohup /home/pi/python/do_every_5_segons.sh &
需要“&”,以便在此行之后可以进行更多初始化。
“nohup”是必需的,因此 shell 在父端仍然存在。
我的问题是:
- 这种情况下正确的服务“类型”是什么?
不要使用nohup
。不要使用 &
。不要将您的脚本包装在另一个脚本中。做前两件事中的任何一件都会阻止 systemd 检测程序何时崩溃并重新启动它,而第三件事会使信号处理复杂化。
做 使用Restart=always
。 做 创建一个 Install
部分,并将您的服务配置为在启动时启动的目标的依赖项。
[Unit]
Description=R4 start
[Service]
WorkingDirectory=/home/pi/tools
ExecStart=/home/pi/tools/run-poll-loop
Restart=always
[Install]
WantedBy=multi-user.target
...其中 run-poll-loop
是可执行的 (chmod +x
) 并且包含您的逻辑(注意,命令名称不应有扩展名;.sh
is bad practice):
#!/usr/bin/env bash
while :; do
# ...do whatever you need here...
sleep 5
done
请注意,对于比每 5 秒延迟更慢的延迟,我建议使用 systemd 计时器 运行 一个每次只执行一次循环迭代的一次性服务;但是对于这么短的计时器,这将增加相当多的 process-startup 开销。
在系统启动时,使用 systemd 服务, 我想永远启动 bash 到 运行,每 5 秒执行一次操作。
它的代码很简单(do_every_5_segons.sh)
while true
do
{read some JSON from internet} >> $myLogFile 2>&1
sleep 5
done
所以,在我的服务定义中,我写了 (~/.config/systemd/user/r4_start.service )
pi@R4:
[Unit]
Description=R4 start
[Service]
Type=oneshot
RemainAfterExit=yes
Restart=no
WorkingDirectory=/home/pi/tools
ExecStart=/home/pi/tools/r4_start.sh
然后在“r4_start.sh”中,我做了一些跟踪,然后启动我的 bash :
nohup /home/pi/python/do_every_5_segons.sh &
需要“&”,以便在此行之后可以进行更多初始化。
“nohup”是必需的,因此 shell 在父端仍然存在。
我的问题是:
- 这种情况下正确的服务“类型”是什么?
不要使用nohup
。不要使用 &
。不要将您的脚本包装在另一个脚本中。做前两件事中的任何一件都会阻止 systemd 检测程序何时崩溃并重新启动它,而第三件事会使信号处理复杂化。
做 使用Restart=always
。 做 创建一个 Install
部分,并将您的服务配置为在启动时启动的目标的依赖项。
[Unit]
Description=R4 start
[Service]
WorkingDirectory=/home/pi/tools
ExecStart=/home/pi/tools/run-poll-loop
Restart=always
[Install]
WantedBy=multi-user.target
...其中 run-poll-loop
是可执行的 (chmod +x
) 并且包含您的逻辑(注意,命令名称不应有扩展名;.sh
is bad practice):
#!/usr/bin/env bash
while :; do
# ...do whatever you need here...
sleep 5
done
请注意,对于比每 5 秒延迟更慢的延迟,我建议使用 systemd 计时器 运行 一个每次只执行一次循环迭代的一次性服务;但是对于这么短的计时器,这将增加相当多的 process-startup 开销。