【问题标题】:How to run bash script as background process on system forever?如何在系统上永远运行 bash 脚本作为后台进程?
【发布时间】:2021-09-29 17:49:35
【问题描述】:

我有一个脚本(sync.sh),它在内部运行一个while循环进行同步。

#!/bin/bash
while :
do
     #my PHP scripts runs parallel 

     wait
     sleep 60
done

我想在我的虚拟机中永远独立运行这个脚本。

我知道我可以使用 nohup, disown 命令将这个 sh 文件作为后台进程运行

但我想知道的是?如何在系统重新启动时运行此 .sh 文件,否则它的进程会被终止。如何在 Ubuntu VM 中无需终端命令自动启动 .sh 文件。(就像我们在系统启动时启动 Apache、MySQL 服务)

提前致谢。

【问题讨论】:

  • 对我来说...... “永远独立运行这个脚本” ... 需要一种定期验证脚本正在运行的方法(例如,脚本是否死了?有人/某事杀死了脚本?);我通常做的是向脚本添加逻辑,允许它检查(自身的)副本是否已经在运行,然后做出相应的反应,然后我安排(在 cron 中)脚本定期运行

标签: bash shell ubuntu init


【解决方案1】:

如果你使用systemD,你应该为你的脚本sync.sh创建一个服务,这个文件将是:

/lib/systemd/system/sync.service 

您可以编辑此文件(使用“root”或“sudo”权限)使其包含:

[Unit]
Description=My Shell Script for Sync

[Service]
ExecStart=/usr/bin/sync.sh

[Install]
WantedBy=multi-user.target

然后,您重新加载您的 systemD 守护程序(因此它知道已添加服务):

sudo systemctl daemon-reload 

然后您可以启用您的服务(因此它将在每次系统启动时启动:

sudo systemctl enable sync.service 

然后你可以手动启动它,它会立即启动,而不是等待下一次系统重启:

sudo systemctl start sync.service 

(当然,您可以更改服务的名称,不一定叫“sync.service”

【讨论】:

  • 谢谢。这是我真正需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多