• Linux学习笔记(3)linux服务管理与启停(开机自启与自定义服务)


    一、LINUX 系统服务管理

    1、RHEL/OEL 6.X及之前

      service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、查看状态(status)等。

      chkconfig用于查看、设置服务器的运行级别。ntsysv用于直观方便的设置各个服务是否自动启动。

      service命令本身是一个shell脚本,它在/etc/init.d/目录查找指定的服务器脚本,然后调用该服务脚本来完成任务。

    2、RHEL/OEL 7.X之后

      systemctl是新的服务管理器命令,该命令是用来替代service和chkconfig的;

      systemctl是一个systemd工具,主要负责控制systemd系统的服务管理器。

      启用服务就是在当前的 "runlevel" 的配置文件目录 /etc/systemd/system/multi-user.target.wants/ 里,

      建立 /usr/lib/systemd/system 里面对应服务配置文件的软链接。禁用服务就是删除此软链接。

    3、指令对照表

    旧指令指的是redhat 6.X之前,新指令指定是红帽7.X之后

    任务 旧指令(redhat 6.x及之前) 新指令(redhat 7.X及之后)
    使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd service
    使某服务不自动启动 chkconfig --level 3 httpd off systemctl disable httpd service
    检查服务状态 service httpd status

    systemctl status httpd.service(详细信息)

    systemctl is-active test.service(仅显示是否活跃)

    加入自定义服务 chkconfig --add test systemctl load test.service
    删除服务 chkconfig --del test 停掉应用,删除对应配置文件
    显示所有已启动的服务 chkconfig --list systemctl list-units --type = service
    启动某服务 service httpd start systemctl start httpd.service
    停止某服务 service httpd stop systemctl stop httpd.service

     

     

     

     

     

     

     

     

     

     

     

    重启某服务      service httpd restart      systemctl restart httpd.service

    查看某服务的自启信息  chkconfig --list httpd

     ----------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------

    4、自定义封装成服务,开机自启

    【4.1】CentOS6自定义系统服务

        6比较简单,直接把启动的 sh 命令脚本文件放到 /etc/init.d/ 下即可。
        然后使用例如:chkconfig --level 2345 https on

    【4.2】CentOS7自定义系统服务
    CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,
    即:/usr/lib/systemd/system目录下.
    CentOS7的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install] 
    
    
    [Unit]部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别
    
    [Service]部分是服务的关键,是服务的一些具体运行参数的设置.
    Type=forking是后台运行的形式,
    User=users是设置服务运行的用户,
    Group=users是设置服务运行的用户组,
    PIDFile为存放PID的文件路径,
    ExecStart为服务的具体运行命令,
    ExecReload为重启命令,
    ExecStop为停止命令,
    PrivateTmp=True表示给服务分配独立的临时空间
    #注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
    
    [Install]部分是服务安装的相关设置,可设置为多用户的
    首先,使用systemctl start [ 服务名(也是文件名) ] 可测试服务是否可以成功运行, 如果不能运行则可以使用 systemctl status [ 服务名(也是文件名) ]查看错误信息和其他服务信息,然后根据报错进行修改,直到可以start,如果不放心还可以测试restart和stop命令。 接着,只要使用systemctl enable xxxxx就可以将所编写的服务添加至开机启动即可。
    
    
    
    实例:服务用于开机运行tomcat项目:
    #vim /usr/lib/systemd/system/tomcat.service
    [Unit]
    Description=java tomcat project
    After=tomcat.service
      
    [Service]
    Type=forking
    User=users
    Group=users
    PIDFile=/usr/local/tomcat/tomcat.pid
    ExecStart=/usr/local/tomcat/bin/startup.sh
    ExecReload=
    ExecStop=/usr/local/tomcat/bin/shutdown.sh
    PrivateTmp=true
      
    [Install]
    WantedBy=multi-user.target
    添加可执行权限:
      chmod 754 /usr/lib/systemd/system/tomcat.service
    设置为开机自启动:
      #systemctl enable tomcat.service
     常用指令(以tomcat服务为例):
    启动某服务 
      systemctl start   tomcat.service
     
    停止某服务
      systemctl stop   tomcat.service
     
    重启某服务
      service tomcat   restart
      systemctl restart   tomcat.service
     
    使某服务自动启动(如tomcat服务)
     
      systemctl enable   tomcat.service
     
    使某服务不自动启动
      systemctl disable   tomcat.service
     
    检查服务状态 
      systemctl   status tomcat.service (服务详细信息)
      systemctl   is-active tomcat.service(仅显示是否Active)
     
    显示所有已启动的服务
      systemctl   list-units --type=service

    【CentOS7 实用技巧】 

    systemctl daemon-reload #重载系统服务(写好自定义服务后,如果要立马可用,必须使用这个重载)
    systemctl list-unit-files #查看所有开机自启的服务

    5、最佳实践吧mysql封装成自定义服务

    [Unit]
    Description=Mysql
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/mysql/data/XXX.pid
    ExecStart=/usr/local/mysql/support-files/mysql.server start
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=false
    
    [Install]
    WantedBy=multi-user.target
    systemctl daemon-reload #重载系统服务(写好自定义服务后,如果要立马可用,必须使用这个重载)
    systemctl list-unit-files #查看所有开机自启的服务

    二、开机自动启动脚本

    1./etc/rc.local

    最简单粗暴的方式直接在脚本/etc/rc.d/rc.local(和/etc/rc.local是同一个文件,软链)末尾添加自己的脚本
    然后,增加脚本执行权限

    chmod +x /etc/rc.d/rc.local

    2.crontab

    crontab -e
    @reboot /home/user/test.sh

    3. /etc/profile.d/

    每次登录自动执行
      也可以设置每次登录自动执行脚本,在/etc/profile.d/目录下新建sh脚本,
      /etc/profile会遍历/etc/profile.d/*.sh

    另外,几个脚本的区别:
    (1) /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

    (2) /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。

    (3) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,设置一些环境变量,执行用户的.bashrc文件。

    (4) ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

    (5) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是”父子”关系。

    (6) ~/.bash_profile: 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

  • 相关阅读:
    nginx设置屏蔽,可访问id的方法
    python实现rcp远程调用介绍
    0.0.0.0
    datetime 模块详解 -- 基本的日期和时间类型
    python函数——形参中的:*args和**kwargs
    时间加一天,一个小时得到新的时间
    good blog
    Python-第三方库requests详解
    python requests的content和text方法的区别
    MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
  • 原文地址:https://www.cnblogs.com/gered/p/9880117.html
Copyright © 2020-2023  润新知