摘要:以往的服务通常使用supervisord或者crontab的方式来守护或者定时执行,最近遇到了自己写的服务所依赖到一些组件服务,在开机的没有自动启动的问题,所以这次对添加linux开机自启动的一些方式做一个总结。让自己的服务可以做到无人托管开机自启动,减少运营成本的同时可以防止有人偷偷写入开机启动项,启动一些没有必要的服务。
用户自定义开机程序(/etc/rc.d/rc.local)
- 这些就是开机的时候会自动执行的脚本和命令了。
- 这个时候就有人问了,我以前写的是
/etc/rc.local
这个文件也没写过你说的/etc/rc.d/rc.local
文件啊。这是因为/etc/rc.local
软链接到/etc/rc.d/rc.local
,所以写到哪个文件里都是一样的 - 写在这个文件里的开机脚本都是默认后台执行的,不需要再加
&
符号了
自写脚本登陆自动执行(/etc/profile.d/),不是开机自动执行
- 目录中存放的是一些应用程序所需的启动脚本,其中包括了颜色、语言、less、vim及which等命令的一些附加设置。
- 当一个用户登录Linux系统或使用su -命令切换到另一个用户时,也就是Login shell 启动时,首先要确保执行的启动脚本就是
/etc/profile
。(只有Login shell
启动时才会运行/etc/profile
这个脚本,也就是需要输入账号和密码的时候,而Non-login shell
不会调用这个脚本) - 这些脚本文件之所以能够 被自动执行,是因为在
/etc/profile
中使用一个for循环语句来调用这些脚本。而这些脚本文件是用来设置一些变量和运行一些初始化过程的。
chkconfig命令设置 可设置优先级别
/etc/rc.d/init.d
目录
为什么要介绍/etc/rc.local/init.d
目录是因为要使用chkconfig来管理自动启动的脚本,首先将启动文件cp到 /etc/init.d/或者/etc/rc.d/init.d/(前者是后者的软连接)下才可以
[root@VM_0_15_centos init.d]# ls
abrt-ccpp atd cloud-config crond iptables lvm2-lvmetad netconsole ntpd psacct restorecond single
abrtd auditd cloud-final functions irqbalance lvm2-monitor netfs ntpdate quota_nld rsyslog sshd
abrt-oops blk-availability cloud-init halt kdump mdmonitor network postfix rdisc sandbox udev-post
acpid bootlocal cloud-init-local ip6tables killall messagebus nfs-rdma pptpd rdma saslauthd YDService
[root@VM_0_15_centos init.d]# cp pptpd pptpd2
[root@VM_0_15_centos init.d]# service pptpd2 status
pptpd (pid 1324) is running...
[root@VM_0_15_centos init.d]# /etc/rc.d/init.d/pptpd2 status
pptpd (pid 1324) is running...
- 此目录下的脚本会被提供给service或者systemctl使用
- 一般存在以下命令
start、stop、reload、restart、force-reload
大多数的情况下,你会使用到start,stop,restart
选项 - 当然了要使用init.d目录下的脚本,你需要有root权限或sudo权限。每个脚本都将被作为一个命令运行,每个脚本也至少需要755权限。
/etc/init.d
指向/etc/rc.d/init.d
目录
如何添加一个服务
增加服务的步骤:
- 服务脚本必须存放在/etc/ini.d/目录下;
chkconfig --add servicename
在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;chkconfig --level 35 mysqld on
修改服务的默认启动等级。
[root@VM_0_15_centos init.d]# vim pptpd
#!/bin/sh
#
# Startup script for pptpd
#
# chkconfig: - 85 15
# description: PPTP server
# processname: pptpd
# config: /etc/pptpd.conf
- 脚本文件前面务必添加如下三行代码,否侧会提示chkconfig不支持
#!/bin/sh 告诉系统使用的shell,所以的shell脚本都是这样
#chkconfig: 35 20 80 分别代表运行级别,启动优先权,关闭优先权,此行代码必须
#description: http server(自己随便发挥)此行代码必须
chkconfig --add 脚本文件名 操作后就已经添加了
使用范例:
chkconfig --list #列出所有的系统服务
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list #列出系统所有的服务启动情况
chkconfig --list mysqld #列出mysqld服务设置情况
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级
运行级别
代表是何等级时可以在开机时自动运行此服务
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有联网NFS)
运行级别3:完全的多用户状态(有联网NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
- 需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
- 如果默认情况下,服务不应在任何运行级别中启动,则应使用-代替运行级别列表。
- 通常自己的服务使用等级35就可以了,最多2345也就是
chkconfig servicename on
ntsysv:类图形界面管理模式来设置开机启动 (RedHat特有)
Linux ntsysv命令用于设置系统的各种服务。
这是Red Hat公司遵循GPL规则所开发的程序,它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级中,所要执行的系统服务。
这种方式不算通用,所以我这里就不赘述了,有兴趣可以移步Linux ntsysv:设置系统服务
总结
开机启动项
- 添加脚本到或者命令
/etc/rc.d/rc.local
- 先把脚本放到
/etc/rc.d/init.d
下,再使用chkconfig servername on
命令添加2345运行级别到开机启动项(脚本写的规则见详情) - ntsysv不常用可以忽略
使用密码登陆时运行
- 把脚本放到
/etc/profile.d/
下
引用
linux下三种开机自启动服务的方式总结 linux 添加开机启动项的三种方法。 Linux ntsysv命令 /etc/profile 文件和/etc/profile.d chkconfig 服务的添加、顺序 Linux 系统开机启动项清理
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论