添加linux开机启动项

摘要:以往的服务通常使用supervisord或者crontab的方式来守护或者定时执行,最近遇到了自己写的服务所依赖到一些组件服务,在开机的没有自动启动的问题,所以这次对添加linux开机自启动的一些方式做一个总结。让自己的服务可以做到无人托管开机自启动,减少运营成本的同时可以防止有人偷偷写入开机启动项,启动一些没有必要的服务。

用户自定义开机程序(/etc/rc.d/rc.local)

rc.local

  • 这些就是开机的时候会自动执行的脚本和命令了。
  • 这个时候就有人问了,我以前写的是/etc/rc.local这个文件也没写过你说的/etc/rc.d/rc.local文件啊。这是因为/etc/rc.local软链接到/etc/rc.d/rc.local,所以写到哪个文件里都是一样的
  • 写在这个文件里的开机脚本都是默认后台执行的,不需要再加&符号了

自写脚本登陆自动执行(/etc/profile.d/),不是开机自动执行

/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/(前者是后者的软连接)下才可以

1
2
3
4
5
6
7
8
9
10
[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目录

chkconfig

如何添加一个服务

增加服务的步骤:

  1. 服务脚本必须存放在/etc/ini.d/目录下;
  2. chkconfig --add servicename在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
  3. chkconfig --level 35 mysqld on修改服务的默认启动等级。
1
2
3
4
5
6
7
8
9
[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不支持
1
2
3
#!/bin/sh 告诉系统使用的shell,所以的shell脚本都是这样
#chkconfig: 35 20 80 分别代表运行级别,启动优先权,关闭优先权,此行代码必须
#description: http server(自己随便发挥)此行代码必须

chkconfig –add 脚本文件名 操作后就已经添加了
使用范例:

1
2
3
4
5
6
7
8
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等级

运行级别

代表是何等级时可以在开机时自动运行此服务

1
2
3
4
5
6
7
运行级别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:设置系统服务

总结

开机启动项

  1. 添加脚本到或者命令 /etc/rc.d/rc.local
  2. 先把脚本放到/etc/rc.d/init.d下,再使用chkconfig servername on命令添加2345运行级别到开机启动项(脚本写的规则见详情)
  3. ntsysv不常用可以忽略

使用密码登陆时运行

  1. 把脚本放到/etc/profile.d/

引用

linux下三种开机自启动服务的方式总结

linux 添加开机启动项的三种方法。

Linux ntsysv命令

/etc/profile 文件和/etc/profile.d

chkconfig 服务的添加、顺序

Linux 系统开机启动项清理

坚持原创技术分享,您的支持将鼓励我继续创作!