我希望 bash 脚本在某个服务之前完成systemd
其工作(而不仅仅是启动) ,据我所知,该解决方案涉及在其自己的服务完成之前完成。
网络搜索可以找到有关如何开始的问题。据我了解,Before=
选择是等到设备启动。因此阅读时man systemd.service
我只看到一个选项Type=forking
::
当父进程退出时,服务管理器将认为该单元已启动。
即使我没有在脚本中分叉任何进程。我在这里说得对吗?这是否能保证(除了错误等)我的脚本将在服务启动之前完成Before=
?
例如其他类型:Type=exec
:
“而在服务进程中的 fork() 和 execve() 都成功之前,exec 将不会继续。”
我不清楚proceed
这里的意思,同时阅读man execve
我也不明白 systemd 如何知道是否execve
成功:
execve() 成功后不返回,并且根据新加载程序的内容覆盖调用进程的文本、初始化数据、未初始化数据(bss)和堆栈。
据我所知,其他类型(notify、dbus)man
在进程启动时需要特殊功能。
我认为你可以很好地
type=oneshot
使用RemainAfterExit=true
; 从文档中可能不太清楚主要流程是什么,但是看一下解释
ExecStart=
就会发现:编辑
请注意,这
Type=oneshot
是唯一允许多个ExecStart=
选项的类型。它们按照出现的顺序依次执行,并且每个进程在运行时都是各自的主进程。再次查看手册: