重新启动后启动多个“屏幕”脚本的最佳方法? (分)

重新启动后启动多个“屏幕”脚本的最佳方法? (分)

我们使用的是centos。一旦服务器重新启动并且操作系统完全加载,我们希望某个用户(“foo”)使用 screen 启动三个或四个脚本。

例如,

screen -d -m -S script1 forever -o script1.log -e script1.log -l script1.log -c php /path/to/script1.php

使用 CentOS 实现这一目标的最佳方法是什么?我宁愿避免过多地研究 init.d 。

使用 systemd,我尝试检查服务(“通知”)并看到以下内容:

   Loaded: loaded (/etc/systemd/system/[email protected]; enabled)
   Active: failed (Result: exit-code) since Sun 2016-03-20 15:08:04 EDT; 14s ago
  Process: 1690 ExecStop=/usr/bin/screen -S notify -X quit (code=exited, status=1/FAILURE)
  Process: 941 ExecStart=/usr/bin/screen -d -m -S notify forever -o notifyout.log -e notifyerr.log -l notifyforever.log -c php /path/to/script/notify.php (code=exited, status=0/SUCCESS)
 Main PID: 946 (code=exited, status=0/SUCCESS)

为什么会被阻止?我怎样才能开始调试这个?

答案1

由于这是 CentOS 7,因此您应该使用 systemd 服务来启动该服务。您甚至可以让它在屏幕内运行。来自archlinux 维基:

创建一个文件:/etc/systemd/system/[email protected]

[Unit]
Description=screen
After=network.target

[Service]
Type=simple
User=%i
ExecStart=/usr/bin/screen -DmS autoscreen
ExecStop=/usr/bin/screen -S autoscreen -X quit

[Install]
WantedBy=multi-user.target

然后启用它 如果您不打算使其可以在任何用户下运行,您可以在启用它时删除文件名中的@和单元名称中的@USERNAME,并硬编码单元文件中的用户。systemctl enable [email protected]

答案2

我编辑/etc/rc.local并添加了这个

/etc/init.d/start_bg_scripts

然后我补充道/etc/init.d/start_bg_scripts

#!/bin/bash
/usr/bin/screen -d -m -S script1 forever --minUptime 1 --spinSleepTime 1 -o script1out.log -e script1err.log -l script1forever.log -c php /path/to/script.php

--minUptime 1 和 --spinSleepTime 1 意味着它们不断尝试重新连接,直到其余的系统服务(例如 mysqld)变得可用

相关内容