这是我的Systemd脚本:
[Unit]
Description=RDS Services
[Service]
WorkingDirectory=/home/rdsdb2/script_rds/
Type=oneshot
ExecStart=/bin/bash start_services.sh
ExecStop=/bin/bash stop_services.sh
KillMode=process
[Install]
WantedBy=multi-user.target
我不知道为什么它要顺序执行(在系统启动时或当我手动启动时)ExecStart和ExecStop。
你能帮助我吗?
提前致谢。
最佳答案
类型=单快照用于执行某些操作而不保留 Activity 进程的单元,例如文件系统检查或清除。这样的系统单元将一直鸣叫,直到 ExecStart 指定的进程终止,然后通过运行 ExecStop 指定的进程将其停用。
类型=简单(默认设置)是使用 ExecStart ExecStart 配置的进程是服务的主要进程时使用的。这样的单元将等待,直到 ExecStart 指定的过程返回,然后通过运行 ExecStop 指定的过程来停用。
如果使用 RemainAfterExit = yes ,则即使返回了所有进程,该服务也将被视为 Activity 状态,因此 ExecStop 指定的进程将不会自动运行。但是,不建议使用此设置,因为即使服务崩溃了,该服务仍会显示为处于 Activity 状态。默认情况下禁用此设置。
类型= fork 用于在启动完成后预期由 ExecStart 指定的进程退出,而其子进程继续在后台运行的情况。这是传统UNIX守护程序的行为,也是您所建议的选择。 ExecStop 设置是可选的,用于与服务进行通信以进行干净的终止。如果服务崩溃,则将运行由 ExecStop 指定的进程。在没有 ExecStop 选项的情况下,systemctl stop servicename命令将简单地杀死单元的其余进程,如 KillMode 选项所指定。
关于bash - Systemd脚本在ExecStart之后立即执行ExecStop,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30640717/