Linux服务器守护进程方案及实现

作者: F_wind | 来源:发表于2019-10-10 17:44 被阅读0次
Linux服务器进程守护思路.jpg

总体思路

  1. 在linux服务器新建无登录账号(/sbin/nologin/)
  2. 构建自动化启动进程脚本
  3. 新建计划任务定时监控服务(crontab)

初衷

在服务器的管理中,我们需要启动一些服务,出于安全方面的考虑,我们不希望以root的方式启动它,而是为这些服务单独建立相应的账号,并且禁用它们的shell登录权限。

实现过程

场景说明

在linux服务器上实现对于nodejs进程进行守护的场景。

构建nodejs程序

  1. 我们新建一个nodejs程序server.js:
const http = require(‘http’)
const server = http.createServer(function (req, res) {
    res.writeHead(200, {
        ‘Content-Type’: ‘application/json’
    });
    res.end(‘{“server”:”nodejs”}’);
});
server.listen(8080)
console.log(“port = 8080”)
  1. 常规启动:
node server.js

启动以后,server.js进程属于root用户,或者其他可以shell登录的用户:


726223FE-043B-4807-8E96-82F553517F36.png
  1. 在浏览器敲入ip加端口即可查看运行结果:


    04EDB1C0-7455-42D4-8141-C14059419131.png

新建无登录账号

  1. 新建账号:
useradd -M -s /sbin/nologin nodejsUser
  1. 在/etc/passwd下查看账号状态:
1F2C7BA3-B386-43FC-AD9C-55AB2D45E8E7.png

nodejsUser是无法shell登录的,我们可以使用如下命令启动server.js:

# 赋予nodejsUser账号可访问server.js文件的权限
sudo chown nodejsUser /opt/nodejsUser/server.js
# 启动
sudo -u nodejsUser node /opt/nodejsUser/server.js
  1. 此时查看8080端口,可以发现,现在用户是nodejsUser了:


    1AC51472-D033-4089-99C9-FD407A4ED153.png

编写自动化启动脚本

  1. 此处我们需要借助tmux工具来实现实时监控nodejs进程的功能,下面是具体实现过程server.sh:
#!/bin/bash
# tumx启动脚本

# 兼容zsh
export DISABLE_AUTO_TITLE="true"
# 会话名称
session=“sever”
# 判断server.js进程是否存在
ps -ef|grep "node /opt/nodejsUser/server.js" |grep -v grep
if [ $? -ne 0 ]
then
    echo "start process....."
      # 判断tmux会话是否存在
    tmux has-session -t $session
    if [ $? = 0 ]
        then
          # 如果存在,则进入该会话
        tmux attach-session -t $session
    else
          # 如果不存在,则新建会话
        tmux new-session -d -s $session
    fi
      # 发送启动程序命令
    tmux send-keys -t $session "sudo -u nodejsUser node /opt/nodejsUser/server.js" C-m
else
      echo "runing....."
fi
exit
  1. 当tmux会话启动以后,可以随时查看server.js运行的情况:
#   启动会话
tmux a -t server

自定义计划任务

  1. 新建计划任务:
crontab -e
  1. 任务内容:
*/1 * * * * /bin/bash /opt/nodejsUser/server.sh >> /opt/nodejsUser/run.log 2>&1

每分钟执行一次server.sh脚本,执行情况记录到日志文件run.log当中。crontab的定时机制可以自行查阅,比较好理解,这里不再赘述。

写在最后的话

到此为止,所有功能均已实现,我们的计划任务会定时对server.js进程扫描,当发现该进程crash时,会自动重启。当服务器重启时,计划任务也会超常运行。

其实在这之前,我在管理nodejs项目时,使用的是pm2监控工具,现成的免费工具,用起来确实也比较方便,但是在无登录账号下遇到无法启动pm2的问题,虽然花了一些时间攻克,但最终并没有解决,因此就有了本文中的解决方案,先用一段时间看看效果吧。

相关文章

  • 进程守护进程

    什么是守护进程?Linux 的大多数服务器就是用守护进程实现的,使用ps -axj可以查看守护进程: 守护进程基本...

  • Linux服务器守护进程方案及实现

    总体思路 在linux服务器新建无登录账号(/sbin/nologin/) 构建自动化启动进程脚本 新建计划任务定...

  • Window下使用bat批处理实现进程守护

    笔者早linux中写过shell脚本来实现进程守护(参考文章-Linux进程怎么保证高可用性),思路是判断进程...

  • Linux下MySQL的启动方式

    Linux下MySQL的启动方式 在Linux系统下,MySQL服务器通常有四种启动方式:mysqld守护进程启动...

  • 开源HIDS-Wauzh功能测试

    一、Wazuh 守护进程及工具进程 守护进程 ossec-agentd https://documentation...

  • linux进程

    linux进程包含如下几个方面:1:进程的控制(创建,等待子进程终止,执行程序,退出)2:守护进程(什么是守护进程...

  • 4.5、守护进程及信号处理实战

    1、守护进程功能的实现守护进程融入项目,解放终端。相关配置:Daemon = 1;按照守护进程的方式运行守护进程如...

  • android aidl流程

    aidl为实现跨进程通信,android提供的简单方案 对于跨进程,我们都知道android底层是linux,所以...

  • 孤儿进程、僵尸进程和守护进程

    [TOC] 参考资料 Linux 之守护进程、僵死进程与孤儿进程【概述】-Linux内核三驾马车之-进程管理【Li...

  • Keepalived高可用LVS反向代理服务器

    Keepalived是什么? Keepalived是VRRP在Linux上的一种实现,以守护进程方式运行。能够更具...

网友评论

    本文标题:Linux服务器守护进程方案及实现

    本文链接:https://www.haomeiwen.com/subject/xmpapctx.html