Linux系统shell脚本设置开机自启

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

需求

在测试过程中,可能会出现需要重启服务器,但是应用到的服务呢又比较多,那么一个个的手动执行,又略显繁琐,想一个一劳永逸的办法呢就是设置开机自启,但是呢,又还害怕一下子cpu爆满服务器宕机?这些问题需要一一解决,手动百度了一下linux服务器可以完成开机自启的几种方式!

其一:修改开机启动文件/etc/rc.local(或者/etc/rc.d/rc.local)

在exit 0 之前,添加启动shell脚本的绝对路径,并且授权<可执行>:chmod +x xxx.sh

最后还需要给开机启动文件授权:chmod 755 /etc/rc/local

点评:可以说简单粗暴

其二:将自己写好的脚本放到/etc/profile.d/目录下,系统会自动执行该目录下的所有shell脚本

点评:简单

其三:通过使用chkconfig命令设置,步骤:写好shell脚本、放置/etc/init.d/xxx路径,添加服务列表、

点评:繁琐

/etc/rc.d/init.d/serverName<variable>

chkconfig命令

先介绍:chkconfig命令,主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
复制代码

使用语法:

chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

chkconfig 在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。
如果是,返回true,否则返回false。如果在服务名后面指 定了on,off或者reset,那么chkconfig会改
变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的
初始化脚本指定了什么。on和off开 关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。
复制代码

参数用法:

   --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。

   --del   删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。

   --level <等级代号> server_name on/off  指定读系统服务要在哪一个执行等级中开启或关闭。

      等级0表示:表示关机

      等级1表示:单用户模式

      等级2表示:无网络连接的多用户命令行模式

      等级3表示:有网络连接的多用户命令行模式

      等级4表示:不可用

      等级5表示:带图形界面的多用户模式

      等级6表示:重新启动
复制代码

需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

    chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。

    chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。

    chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。

    chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。
复制代码

运行级文件:

每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和 停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。

例如,random.init包含三行:

#!/bin/sh

# chkconfig: 2345 20 80

# description: Saves and restores system entropy pool for \

# higher quality random number generation.
复制代码

上面三行一定不能丢掉,否则chkconfig --add server_name 会报错

chkconfig后面两个数值;20 是启动级别,开机顺序值越小越快,80是关闭级别,值越大越慢

其四:自定义服务文件,添加到服务系统,通过systemctl管理

[Unit]#:服务的说明

Description:描述服务

After:描述服务类别

[Service] #服务运行参数的设置

Type=forking #是后台运行的形式

ExecStart #为服务的具体运行命令

ExecReload #为服务的重启命令

ExecStop #为服务的停止命令

PrivateTmp=True #表示给服务分配独立的临时空间

[Install] 服务安装的相关设置,可设置为多用户
WantedBy=multi-user.target
复制代码

注意:启动、重启、停止命令全部要求使用绝对路径

systemctl list-unit-files # 查看所有服务列表

systemctl enable server_name # 添加服务

systemctl disable server_name # 移除服务

systemctl list-units --type=service # 查看启动的服务
复制代码

其五:就是在定时任务管理添加

crontab -e 

@reboot /home/user/test.sh
复制代码

点评:简单到爆