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