tl; dr: 今天用 screen -dmS
代替了原来的手动启动服务。
起因
KEEER 的有些服务需要手动与之交互以 debug,而它们一旦用 /etc/rc*.d/S99whatever
启动,就只有 log,不能连接到 terminal。于是最开始我们用 xrdp 连到图形界面,但是有一天套路云客服给我打电话说内存占用率到了 70% 多,top 一看完全是 Xorg 的锅。遂弃用此方法。后来都是用 screen
手动启动一切。但是一重启就完了。
screen -dmS
自带 help 里给的信息如下:
$ screen --help
......
Options:
......
-dmS name Start as daemon: Screen session in detached mode.
......
-s shell Shell to execute rather than $SHELL.
......
一看,这两者结合不是正好满足要求吗?
实现
- 创建文件夹
/path/to/services/
- 对于每个服务,写一个启动脚本(注意是以 root 执行的,故不能用
~
之类的操作,比如:cd /path/to/some/service/ su username -c "npm run start"
- 创建
/etc/init.d/keeer-services
,如下内容:for service in `ls /path/to/services`; do screen -dmS $service -s /path/to/services/$service; done;
- 用 root 把文件 link 过去:
for d in /etc/rc*.d; do ln -s /etc/init.d/keeer-services $d/S99keeer-services; done;
- 用 root加上可执行权限:
chmod +x /etc/init.d/keeer-services
- 重启:
sudo reboot
总结
中间漏了一大堆步骤,导致 reboot 了好多次才搞定,导致服务中断。这是由于我们测试服还没搭好(没错,我们还在用生产服跑测试)。