• Systemd 服务管理器


    博文链接:http://www.cnblogs.com/zhenghongxin/p/8672199.html

    项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,变成守护进程的第一步,就是把它改成"后台任务"(background job)。传统上我们是用以下的方法来做:

    &

    只要在命令的尾部加上符号&,启动的进程就会成为"后台任务"。

    php index.php &

    "后台任务"有两个特点。

    1. 继承当前 session (对话)的标准输出(stdout)和标准错误(stderr)。因此,后台任务的所有输出依然会同步地在命令行下显示。

    2. 不再继承当前 session 的标准输入(stdin)。你无法向这个任务输入指令了。如果它试图读取标准输入,就会暂停执行(halt)。

    nohup

    nohup 的用途就是让提交的命令忽略 hangup 信号。只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。

    [root@VM_113_168_centos www]# nohup php index.php &
    [2] 26047
    [1]   Terminated              nohup php index.php
    [root@VM_113_168_centos www]# nohup: ignoring input and appending output to ‘nohup.out’

    nohup做了三件事:

    • 阻止SIGHUP信号发到这个进程。

    • 关闭标准输入。该进程不再能够接收任何输入,即使运行在前台。

    • 重定向标准输出和标准错误到文件nohup.out。

    setsid

    setsid中的sid指的是session id,意指以该命令运行的进程是一个新的session,因此其父进程id不属于当前终端。实际上,setsid运行的进程,其父进程id(PPID)为1(init 进程的 PID)。

    [root@VM_113_168_centos www]# setsid php index.php

    disown 和 screen等

    还有其他方法诸如disown和screen等方法,在此不做多列举

    Systemd

    systemd的目标是:尽可能启动更少进程;尽可能将更多进程并行启动。systemd尽可能减少对shell脚本的依赖。传统sysvinit使用inittab来决定运行哪些shell脚本,大量使用shell脚本被认为是效率低下无法并行的原因

    下面的命令用来启动服务。

    $ sudo /etc/init.d/apache2 start
    # 或者
    $ service apache2 start

    这种方法有两个缺点。

    一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

    二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

    Systemd 命令

    # 重启系统
    $ sudo systemctl reboot
    # 关闭系统,切断电源
    $ sudo systemctl poweroff
    # CPU停止工作
    $ sudo systemctl halt
    # 暂停系统
    $ sudo systemctl suspend
    # 让系统进入冬眠状态
    $ sudo systemctl hibernate
    # 让系统进入交互式休眠状态
    $ sudo systemctl hybrid-sleep
    # 启动进入救援状态(单用户状态)
    $ sudo systemctl rescue

    诸如此类的命令还有很多,也正是它超高的管理,导致了各种争论,个人建议用Supervisor,也是我们生产环境所用的

    在原始的时候,我们用的也是systemd,在一次升级之后,改用了swoole来做守护进程,再后续的升级中,改成了Supervisor来做守护进程,想要学习systemd的,可以看以下资料:

    1 Systemd 入门教程:命令篇

    http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

    2 Systemd 入门教程:实战篇

    http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

    3 Systemd 中文手册

    http://www.jinbuguo.com/systemd/systemd.html

  • 相关阅读:
    IDEA的database插件无法链接mysql的解决办法(08001错误)
    window.location.href传参/传值汇总
    toggleClass() 方法
    File file=new File ()
    MultipartFile接口
    @RequestParam注解字参数详解
    在微信下载的浏览器判断问题
    JS可控制的图片自动循环播放查看效果
    PHP接口的声明与引用
    js时间
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/8672199.html
Copyright © 2020-2023  润新知