Centos 7创建了在无限循环上运行shell脚本的服务



我有以下脚本:

whie true
do
#code
sleep 60
done

然后我想创建一个服务来启动机器,并将此脚本作为服务启动:在/etc/systemd/system/my.service 上创建了my.service

[Unit]
Description=my Script
[Service]
Type=forking
ExecStart=/bin/script.sh
[Install]
WantedBy=multi-user.target

当我systemctl启动my.service 时出现问题

它转到while true循环并挂在那里,我如何运行此服务并使其在后台运行?

根据链接处的systemd规范。在的情况下,Type=forking不是完全正确的启动类型

如果设置为forking,则预期使用ExecStart=将调用fork((作为其启动的一部分。家长当启动完成并且所有建立了通信信道。孩子继续作为主服务流程,服务经理将考虑该单元在父进程退出时启动。这是传统的UNIX服务。如果使用此设置,建议也可以使用PIDFile=选项,以便systemd能够可靠地识别服务的主要流程。systemd将继续启动在父进程退出后立即跟进单元。

Type=simple可以是正确的。你可以试试

如果设置为simple(如果指定了ExecStart=,则为默认值,但两者都未指定Type=或BusName=are(,服务经理将考虑该单元在主服务进程分叉后立即启动off。预期使用ExecStart=配置的进程是服务的主要流程。在此模式下,如果流程提供系统上其他进程的功能及其通信应在启动服务之前安装通道(例如。套接字由systemd设置,通过套接字激活(,作为服务经理将立即开始后续行动创建主服务进程,并在执行服务的二进制的注意,这意味着systemctl启动简单的命令行即使服务的二进制文件不能成功调用(例如,因为所选的User=没有存在,或者服务二进制文件丢失(。

最新更新