【问题标题】:Centos 7 Created service to run shell script on infinite loopCentos 7 创建服务以在无限循环上运行 shell 脚本
【发布时间】:2021-09-24 08:58:20
【问题描述】:

我有以下脚本:

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 start my.service 时出现问题

它进入while true循环并挂在那里,我怎样才能运行这个服务并让它在后台运行?

【问题讨论】:

    标签: bash service centos


    【解决方案1】:

    根据link 的 systemd 规范。 Type=forking 在您的情况下并不是完全正确的启动方式

    如果设置为分叉,则预计进程配置为 ExecStart= 将调用 fork() 作为其启动的一部分。父母 当启动完成并且所有 建立了沟通渠道。孩子继续奔跑 主要服务流程,服务经理会考虑单位 父进程退出时启动。这是的行为 传统的 UNIX 服务。如果使用此设置,建议使用 还要使用 PIDFile= 选项,以便 systemd 可以可靠地识别 服务的主要流程。 systemd 将继续启动 父进程一退出就跟进单元。

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

    如果设置为简单(如果指定了 ExecStart= 的默认值,但两者都没有 type= nor BusName= are), 服务管理器会考虑单位 在主服务进程被分叉后立即启动 离开。预计使用 ExecStart= 配置的进程是 服务的主要流程。在这种模式下,如果进程提供 系统上其他进程的功能,它的通信 应该在服务启动之前安装频道(例如 由 systemd 设置的套接字,通过套接字激活),作为服务 经理将立即着手启动后续单位,之后 创建主服务进程,并在执行服务之前 二进制。请注意,这意味着 systemctl start 命令行简单 服务将报告成功,即使服务的二进制文件不能 成功调用(例如,因为选定的 User= 没有 存在,或者服务二进制文件丢失)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2013-05-23
      相关资源
      最近更新 更多