在linux中安装的有些程序是用来提供服务,但是其安装脚本中没有给出服务自启动脚本,这就需要我们自己添加自启动脚本。本文以在开发机中(fedora 18)添加confluence服务来讲解
实现方式
- 添加/etc/init.d/脚本
- systemd的实现方式
基础知识
- 运行级别
-
# 0 - 停机(千万不能把initdefault 设置为0 )
-
# 1 - 单用户模式 # s init s = init 1
-
# 2 - 多用户,没有 NFS
-
# 3 - 完全多用户模式(标准的运行级)
-
# 4 - 没有用到
-
# 5 - X11 多用户图形模式(xwindow)
-
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
-
-
/etc/rc.d/目录
- /etc/rc.d/init.d 此目录中保存启动脚本
- /etc/rc.d/rcN.d/ N对应运行级别,即在不同运行级别时选择不同目录中的脚本
- /etc/rc.d/rcN.d/* 此目录下主要有两种文件
- KNxxx这个文件代表关机时执行,即调用此脚本的stop函数
- SNxxx这个文件代表开机时执行,即调用此脚本的start函数
- 上述中N代表优先级,0-100,值越大,优先级越低
- 上述xxx代表对应的启动脚本名,例如:mysql
-
chkconfig命令
-
添加服务 chkconfig --add <name>
-
删除服务 chkconfig --del <name>
-
查看服务列表 chkconfig [--list] [--type <type>] [name]
-
修改服务状态 chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>
-
第一种方式的栗子
添加脚本
例如下面的启动脚本:/etc/rc.d/init.d/confluence
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/bin/bash
# chkconfig: 2345 98 98
# description: Confluence
# Confluence Linux service controller script
cd
"/opt/atlassian/confluence/bin"
case
"$1"
in
start)
.
/start-confluence
.sh
;;
stop)
.
/stop-confluence
.sh
;;
restart)
.
/stop-confluence
.sh
.
/start-confluence
.sh
;;
*)
echo
"Usage: $0 {start|stop|restart}"
exit
1
;;
esac
|
其中:
- 第一行中“#!/bin/bash” 不多解释,表明用什么脚本解释器执行该脚本
- 第二行”# chkconfig: 2345 98 98“, 如果想要被chkconfig识别,此行必须加,2345对应着运行级别,第一个98代表开机优先级,第二个98代表关机优先级
- 第三行是描述
- 脚本输入参数有:start,stop,restart,无参数等,这个要因功能而定,但是,start和stop是必须的
识别脚本
为了让chkconfig识别脚本,并且使脚本生效可以执行以下命令
此命令执行以后,可以查看对应的运行级别目录,可以发现rcN.d目录下多了S98confluence的软连接,其连接的目的都是init.d/confluence
如此以后,重启一下linux就可以验证是否生效了
第二种方式的栗子
systemd的service文件主要存在下面的目录
下面以sshd.service为例,可以看到如下内容
1
2
3
4
5
6
7
8
9
10
11
12
|
[Unit]
Description=OpenSSH server daemon
After=syslog.target network.target auditd.service
[Service]
EnvironmentFile=
/etc/sysconfig/sshd
ExecStartPre=
/usr/sbin/sshd-keygen
ExecStart=
/usr/sbin/sshd
-D $OPTIONS
ExecReload=
/bin/kill
-HUP $MAINPID
[Install]
WantedBy=multi-user.target
|
以后就可以用systemctl命令来启动、关闭sshd服务啦