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

您所在的位置:网站首页 linux开机自启文件 Linux自定义可运行shell脚本并设置开机自启

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

2023-08-16 21:56| 来源: 网络整理| 查看: 265

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 30,chkconfig的第一个参数是指定脚本的运行等级,一般为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 start或service 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 ] [name] # 列出所有服务 chkconfig --add # 增加一个服务 chkconfig --del # 删除一个服务 chkconfig --override chkconfig [--level ] [--type ] # 修改脚本的运行等级 # 示例 [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系统日志管理。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3