Linux设置脚本/服务开机自动运行/启动


  在非图形化界面情况下,Linux开机自动运行/启动的设置可以通过如下方法:

  linux环境:CentOS Stream release 9

1. /etc/rc.local文件

通常对于没有被注册为系统服务的脚本如自行编写的脚本,可以通过在rc.local中添加相关脚本路径和名称来开机自动运行

/etc/rc.local是指向/etc/rc.d/rc.local的一个脚本,它是在系统初始化级别脚本运行之后再执行;

rc.local内容如下:

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
sh /root/t.sh 
exit 0

sh /root/t.sh用户自定义添加的运行脚本命令,需要放在exit 0之前

实测只需添加脚本绝对路径地址和名称也可,如下文启动tomcat的命令一样不加sh  ./等执行。

t.sh内容如下:

#!/bin/sh
touch /root/test.sh
echo ttt > /root/test.sh

reboot后,查看root下,已生成test.sh文件且有内容ttt。

需要注意的是:

1.初次使用该脚本时,需要给/etc/rc.d/rc.local赋予可执行权限,rc.local注释内容也已提到这一点,执行chmod +x /etc/rc.d/rc.local即可

2.该脚本运行时,系统环境变量(如Java环境JDK等)还没正常赋值,因此如是在rc.local里只添加启动tomcat的命令而不设置java环境变量是不会成功的,具体可以查看var/log/messages搜索rc.local日志信息提示

rc.local[910]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
rc.local[910]: At least one of these environment variable is needed to run this program

在rc.local启动tomcat的命令前面加上设置环境变量的命令即可

#!/bin/bashsh /root/t.sh 

export JAVA_HOME=/app/jdk/jdk1.8.0_221
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
/app/tomcat/bin/startup.sh
exit 0

 reboot后已可再次访问tomcat服务

2.chkconfig命令设置

对于在安装过程中已经被注册为系统服务的服务如mysql等,可以通过chkconfig命令设置开机启动;

chkconfig可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。

使用语法:

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

参数

  • --add  增加所指定的系统服务,让 chkconfig 指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
  • --del  删除所指定的系统服务,不再由 chkconfig 指令管理,并同时在系统启动的叙述文件内删除相关数据。
  • --level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。

eg:

开启服务

# chkconfig telnet on   //开启 Telnet 服务

关闭服务

# chkconfig telnet off  // 关闭 Telnet 服务