Centos7开机自启动手册

23 篇文章 1 订阅
9 篇文章 2 订阅

Centos7开机自启动工作手册

前言

本文罗列出Centos7系统上开机自启的一些方法,当然大部分是前人写过的,目的只是在需要做开机自启时快速的响应这种需求,也许百度一下再到研究花半个小时,而我只要2分钟,这就是效率。

开机自动执行脚本

经常,需要在开机时启动我们自定义的脚本,比如服务器到部署了tomcat,redis,而又没做成服务,这时需要定义一个脚本启动tomcat,然后开机自动执行脚本

方法一:在/etc/rc.local文件中添加自启动命令(推荐)

rc.local也是我经常使用的一个脚本。该脚本是在系统初始化级别脚本运行之后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。

优点是脚本位置随意。

  1. 由于/etc/rc.local/etc/rc.d/rc.local的软连接,所以必须确保/etc/rc.local和/etc/rc.d/rc.local都有x权限(可执行)。
chmod +x /etc/rc.d/rc.local
  1. /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
  1. 编辑/etc/rc.local, 在文件尾部添加要执行程序的全路径
vi /etc/rc.local

添加startAll.sh路径,完整如下

touch /var/lock/subsys/local
/home/./startAll.sh

注意/home/./startAll.sh路径里有个.,或者可以写成cd /home && ./startAll.sh

  1. 重启完成。

如果启动不成功,打开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目录下添加自启动脚本(不推荐)

  1. 可以把想要自动运行的脚本放到这/etc/rc.d/init.d目录,并增加可执行权限:chmod +x /etc/rc.d/init.d/startAll.sh
  2. 修改脚本,在脚本的头部添加如下
#!/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时,会报错。换句话说,前三行是固定的,模仿着写即可。

  1. 执行如下命令
    添加服务命令
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:关

也表示添加成功
总结:

  1. 缺点是固定固定,破坏了Linux本身的结构,容易造成不可控问题
  2. 不建议

开放自启服务

对于以服务方式安装在系统里的程序,在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值