Linux自定义可运行shell脚本并设置开机自启

Linux自定义可运行shell脚本并设置开机自启

自定义可运行shell脚本

创建文本文件vim test,并输入如下文本

#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/usr/lib/jdk
export PATH=$JAVA_HOME/bin:$PATH
echo 开机启动了 > /home/startTest

脚本的前三行为固定格式
1、第一行#!/bin/sh首先指明脚本的解释器(一定要在第一行,否则报错)
2、第二行# chkconfig:2345 60 30chkconfig的第一个参数是指定脚本的运行等级,一般为2345即可,第二个参数是脚本的启动优先级(0-100),等级越高,优先级越低,也就启动越晚,第三个参数是关闭优先级,同理启动优先级。
3、脚本的描述信息
后面的代码即为需要执行的命令
通过service命令启动的是否,环境变量无法使用(暂时还不知道什么原因,有待查证),所以需要手动指定类似JAVA_HOME之类的环境变量。我发现这个原因是因为脚本通过sh test运行的时候是没有问题的。但是通过service test start就会报错failed to run command 'java': No such file or directory

编辑好shell脚本之后,赋予脚本可执行权限chmod 777 ./test

在系统init目录下建立脚本文件

这里有两种方式建立
1、直接将上一步创建的shell脚本copy到init目录下cp ./test /etc/init.d/
使用这种方式的话,如果需要修改shell脚本就需要到init目录下修改copy过来的文件
2、通过建立硬链接的方式,在init目录下建立一个shell脚本的硬链接ln ./test /etc/init.d/

注:
这里不可以建立软连接
软链接:
    1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
    2.软链接可以 跨文件系统 ,硬链接不可以
    3.软链接可以对一个不存在的文件名进行链接
    4.软链接可以对目录进行链接

硬链接:
    1.硬链接,以文件副本的形式存在。但不占用实际空间。
    2.不允许给目录创建硬链接
    3.硬链接只有在同一个文件系统中才能创建

所以,如果建立软连接,系统是读取不到shell脚本的具体内容的

增加test服务

使用chkconfig命令将刚刚增加到init目录下的脚本添加成为一个新的服务chkconfig --add test
这时候查看服务列表即可发现多了test服务

[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@VM_0_8_centos csdn]# chkconfig --add test
[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
test			0:off	1:off	2:on	3:on	4:on	5:off	6:off

此时可以发现test服务的启动等级就是按照脚本中注明的启动等级# chkconfig:2345 60 30来的,我们也可以通过命令修改(下面的chkconfig命令详解中有示例操作)。
其实这一步就相当于在系统的启动等级目录(/etc/rc0.d//etc/rc6.d)下创建了相应脚本的连接。

# 这里没有test服务
[root@VM_0_8_centos csdn]# ll /etc/rc3.d/
total 0
lrwxrwxrwx. 1 root root 20 Apr 21  2016 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Apr 21  2016 S10network -> ../init.d/network

而且连接的命名是有规则的,以S(系统在启动的时候,运行脚 本test2,就会添加一个start参数,告诉脚本,现在是启动模式)或K(系统在关闭系统的时候,会运行test2,添加一个stop,告诉脚本,现在是关闭模式)作为第一个字符。后面的数字为启动或关闭的优先级(0-100,也就是在脚本中注明的内容),后面就是脚本的名称。所以根据设置的运行等级和启动关闭的优先级不同,在相对应的启动等级目录中的连接名称也是分为两种。

完成自启

这个时候重启就可以实现服务自启了。
也可以通过service test startservice test stop来启动或停止服务。(但我没测试过,估计需要脚本接收start或stop参数完成不同操作。)

chkconfig命令详解

[root@VM_0_8_centos csdn]# chkconfig --help
chkconfig version 1.3.61 - Copyright (C) 1997-2000 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.

usage:   chkconfig [--list] [--type <type>] [name] # 列出所有服务
         chkconfig --add <name> # 增加一个服务
         chkconfig --del <name> # 删除一个服务
         chkconfig --override <name> 
         chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities> # 修改脚本的运行等级

# 示例
[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
test			0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@VM_0_8_centos csdn]# chkconfig --level 5 test off
[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
test			0:off	1:off	2:on	3:on	4:on	5:off	6:off

查看服务启动日志

因为我们写的脚本有可能会有这种问题,所以查看启动日志还是很有必要的。
centos的系统日志在/var/log/messages,直接vim即可。
我就是因为#!/bin/sh没有放在脚本的第一行报的错,直接运行sh test的时候是没有问题的,但是重启系统就是启动不起来,查看日志才发现问题。

关于Linux系统日志管理可以移步Linux系统日志管理

发布了26 篇原创文章 · 获赞 1 · 访问量 6966

猜你喜欢

转载自blog.csdn.net/qq_39800434/article/details/100989440