【Linux】linux开机自启动程序设置方法


引用:https://blog.csdn.net/qingtian506/article/details/53008605

1.首先在自己的工程文件里编写自启动shell文件,这是我的例子如下:文件名字(testudp.sh),可执行程序为tst_client:

#!/bin/sh
###BEGIN INIT INFO 
# Provides:         tst_client
# Required-Start:    
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:   0 1 6
# Description:        my test
### END INIT INFO
user="root"
dir="/home/usr/test/udp3/tst_client"
cmd="./tst_client"
name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/tmp/$name.log"
stderr_log="/tmp/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
        if is_running; then
            echo "Already started"
        fi
        cd "$dir"
        sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        echo $! > "$pid_file"
    ;;
    stop)
        kill `get_pid`
    ;;
    *)
        echo "auto start failed"
        exit 1
    ;;
esac

exit 0

编写规则如下:1.要有一个start,一般写上执行自己程序所需bash指令,就如在终端中运行一样:

sudo -root ./run

2.其次要有一个stop,一般都是写上kill当前自己的进程。

start和stop用于放在/etc/rc.d文件中,s开头用于启动当前程序,k开头表示kill当前进程。

注:编写好shell文件后,chmod +x shell文件将其变为可执行文件,然后一定要现在自己的终端窗口试一下,可以运行后再进行下一步操作。

2.再将刚刚编写的shell文件拷贝到/etc/init.d中

3.再将shell文件的软链接放置在/etc/rc.d文件中:

rc.d文件分为rc0~rc6,每个数字表示不同的运行等级,每个等级表示如下:

Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

因此可以将启动链接放置在2,3,4,5,将kill链接放置在0,1,6.

打开自己的linux文件夹中,rc0.d、rc6.d中的文件一般以K开头,表示停机时关闭这些程序;

rc1.d中的文件既有k也有s,

rc2.d、rc3.d、rc4.d、rc5.d中全部为s开头,表示此等级下启动程序

软连接设置shell文件如下,也可以拆分成bash指令,一个一个来执行,但太繁琐。shell文件如下:(可将此文件起名为install.sh)

#!/bin/bash
SMTCDIR=/home/usr/test/udp3/tst_client
INITD="/etc/init.d/testudp.sh"
TARGET="testudp.sh"
install -m 755 -g root -o root $SMTCDIR/testudp.sh $INITD
ln -s $INITD /etc/rc0.d/"K01$TARGET"
ln -s $INITD /etc/rc1.d/"K01$TARGET"
ln -s $INITD /etc/rc2.d/"S05$TARGET"
ln -s $INITD /etc/rc3.d/"S05$TARGET"
ln -s $INITD /etc/rc4.d/"S05$TARGET"
ln -s $INITD /etc/rc5.d/"S05$TARGET"
ln -s $INITD /etc/rc6.d/"K01$TARGET"

将此shell文件chmod +x设置为可执行文件,在终端执行./shell即可。此时查看你的/etc/rc.d各个文件中都有了你的软连接。

注:一般自己的应用程序设置级别要注意,开启时要放在系统程序之后,如上述shell文件中都为S05;关闭时要放在系统程序之前,即最早关闭,如上述shell文件中都为K01。

linux执行时都是按照序号来进行,序号越小越先执行。

4.取消开机自启动编写shell脚本如下:(可将此文件起名为unstall.sh)

<pre name="code" class="plain">#!/bin/bash
INITD="/etc/init.d/testudp.sh"
TARGET="testudp.sh"
rm -f $INITD
rm -f /etc/rc*.d/*$TARGET

好了目前为了实现开机自运行编写的文件有:

自启动shell文件:testudp.sh

rc.d软链接设置文件:install.sh

取消开机自运行文件:unstall.sh

大家按照我的模板来写就好了。

好了,以上就是我的心得。写在这里,怕以后忘记了。因为自启动文件写的也少。


文章作者: 陶逸南
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陶逸南 !
评论
 上一篇
【Linux】USB设备绑定固定名称 【Linux】USB设备绑定固定名称
参考:https://wangpengcheng.github.io/2019/09/18/change_usb_rules_ubuntu/ 原理根据设备的“供应商ID”和“产品ID”等信息,来绑定指定的设备名称。 配置方法查看设备信息ud
2020-12-17
下一篇 
【DDNS】群晖配置阿里DDNS 【DDNS】群晖配置阿里DDNS
实现配置容器群晖自带的DDNS中并不直接支持阿里DDNS,所以这里采用docker的方式来实现。 首先打开Docker 搜索“ddns-go” 下载ddns-go 然后启动 高级设置 改成和容器端口一样 在高级设
2020-12-08
  目录