一、chkconfig方式

  一般比较老的centos支持chkconfig,其添加步骤比较简单:

1、在/etc/init.d/目录下新建一个自定义服务的文件如:myservice.sh

2、添加下面两句到 #!/bin/bash 之后。

1 # chkconfig: 2345 10 90 
2 # description: myservice

PS:不添加这两行会报错:执行chkconfig --add myservice后提示:service myservice does not support chkconfig

PS:其中2345是默认启动级别,级别有0-6共7个级别

  等级0表示:表示关机 
  等级1表示:单用户模式 
  等级2表示:无网络连接的多用户命令行模式
  等级3表示:有网络连接的多用户命令行模式  
  等级4表示:不可用 
  等级5表示:带图形界面的多用户模式   
  等级6表示:重新启动

  10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低。

3、命令

开启开机自启动服务:chkconfig myservice on

添加开机自启动服务:chkconfig --add myservice 

查看开机自启动服务:chkconfig --list myservice 

二、systemctl方式(推荐)

  由于chkconfig是Redhat发行版特有的服务配置方式,在基于debian的发行版下原生不支持,因此使用systemctl方式添加自定义系统服务,更具优势。

  systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下。

  systemctl管理的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]。

[Unit]

  主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别

[Service]

  Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。

  Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。

  Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。

  Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。

  Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。

  Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。

  PIDFile:pid文件路径

  ExecStart:指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。

  ExecReload:指定单元停止时执行的命令或者脚本。

  ExecStop:指定单元停止时执行的命令或者脚本。

  PrivateTmp:True表示给服务分配独立的临时空间

  Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。

  RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时需要被配置。

  注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!

[Install]

  服务安装的相关设置,可设置为多用户的

范例:

 1 [Unit]
 2 Description=myservice
 3 After=myservice.service
 4 
 5 [Service]
 6 Type=oneshot
 7 RemainAfterExit=yes
 8 ExecStart=/opt/myservice/start.sh
 9 ExecReload=
10 ExecStop=/opt/myservice/stop.sh
11 
12 [Install]
13 WantedBy=multi-user.target

脚本授权:chmod 755 /usr/lib/systemd/system/myservice.service

开机启动:systemctl enable myservice.service

至此,每次开机都会执行/opt/myservice/start.sh,每次关机都会执行/opt/myservice/stop.sh。

三、chkconfig与systemctl命令对照表

Linux添加自定义系统服务,开机自启_重启

PS:此表仅为命令对照,在chkconfig下配置的服务,是不能使用systemctl运行的!当然如果同时安装配置了两种方式的服务,肯定是都能用的。