Centos7开机自启动工作手册
文章目录
前言
本文罗列出Centos7系统上开机自启的一些方法,当然大部分是前人写过的,目的只是
在需要做开机自启时快速的响应这种需求,也许百度一下再到研究花半个小时,而我只要2分钟,这就是效率。
开机自动执行脚本
经常,需要在开机时启动我们自定义的脚本,比如服务器到部署了tomcat,redis,而又没做成服务,这时需要定义一个脚本启动tomcat,然后开机自动执行脚本
方法一:在/etc/rc.local文件中添加自启动命令(推荐)
rc.local也是我经常使用的一个脚本。该脚本是在系统初始化级别脚本运行之后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。
优点是脚本位置随意。
- 由于/etc/rc.local是/etc/rc.d/rc.local的软连接,所以必须确保/etc/rc.local和/etc/rc.d/rc.local都有x权限(可执行)。
chmod +x /etc/rc.d/rc.local
- 在/home下新建startAll.sh脚本
cd /home
vi startAll.sh
//脚本内容,输出如下内容启动2个tomcat和一个redis
#!/bin/bash
echo "Hello, world!"
cd /usr/local/tomcat/apache-tomcat-8.5.37-1/bin
./startup.sh
cd /usr/local/tomcat/apache-tomcat-8.5.37-7/bin
./startup.sh
cd /usr/local/redis/redis-5.0.3/
./src/redis-server redis.conf
注意,如果我们在windows系统上创建脚本,然后上传到linux上执行,会报/bin/sh^M:损坏的解释器: 没有那个文件或目录错误,原因是在Windows下,每一行的结尾是\n\r,但是在Linux下文件的结尾是\n。
解决办法是:用vim打开该脚本,在命令行模式下输入:set ff=unix来转换
赋予startAll.sh可执行权限
chmod +x startAll.sh
- 编辑/etc/rc.local, 在文件尾部添加要执行程序的全路径
vi /etc/rc.local
添加startAll.sh路径,完整如下
touch /var/lock/subsys/local
/home/./startAll.sh
注意/home/./startAll.sh路径里有个.,或者可以写成cd /home && ./startAll.sh
- 重启完成。
如果启动不成功,打开linux启动日志,查看,less /var/log/messages
,最有可能报Neither the JAVA_HOME nor the JRE_HOME environment variable is defined错误,在tomcat/bin/setclasspath.sh里#!/bin/sh下添加JAVA_HOME。如下
#!/bin/sh
JAVA_HOME=/usr/local/java/jdk1.8.0_191/
方法二:在/etc/init.d目录下添加自启动脚本(不推荐)
- 可以把想要自动运行的脚本放到这/etc/rc.d/init.d目录,并增加可执行权限:chmod +x /etc/rc.d/init.d/startAll.sh
- 修改脚本,在脚本的头部添加如下
#!/bin/bash
#chkconfig: 345 95 95
#description:startAll
chkconfig后面有三个参数345 95 95告诉chkconfig程序,需要在rc0.d~rc6.d目录下,创建名字为 K95startAll.sh 文件连接,连接到/etc/rc.d/init.d目录下的的startAll.sh脚本。
注意上面的三行是中,第二,三行是必须的,否则在运行chkconfig --add startAll时,会报错。换句话说,前三行是固定的,模仿着写即可。
- 执行如下命令
添加服务命令
cd /etc/rc.d/init.d
chkconfig --add startAll.sh
chkconfig startAll.sh on
查看/etc/rc.d/rc0.d目录如下:
[root@localhost init.d]# ll /etc/rc.d/rc0.d
总用量 0
lrwxrwxrwx. 1 root root 20 12月 28 18:03 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 12月 28 18:03 K90network -> ../init.d/network
lrwxrwxrwx. 1 root root 21 1月 21 11:28 K95startAll.sh -> ../init.d/startAll.sh
成功添加了。
命令: chkconfig --list
结果:
[root@localhost ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
startAll.sh 0:关 1:关 2:开 3:开 4:开 5:开 6:关
也表示添加成功
总结:
- 缺点是固定固定,破坏了Linux本身的结构,容易造成不可控问题
- 不建议
开放自启服务
对于以服务方式安装在系统里的程序,在Centos7里使用了systemd代替了运行级别。所有的服务都安装在/usr/lib/systemd/system目录下,每一个服务以.service结尾。。可以通过systemctl enable设置服务自动启动,这种方式最简单
systemctl enable jenkins.service #设置jenkins服务为自启动服务
sysstemctl start jenkins.service #启动jenkins服务
Centos7使用了Systemd,inittab不再起作用,也没有了“运行级”的概念,起作用的配置文件是/etc/systemd/system/default.target这个文件,所有的服务都在/usr/lib/systemd/system目录下
参考Centos7中systemctl命令详解学习systemctl命令
总结
开机自启动脚本建议在/etc/rc.local文件中添加自启动命令,而不是使用chkconfig命令。对于服务方式安装的程序使用systemctl命令。
systemctl命令是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。这个命令必需掌握
,使用帮助systemctl --help