Linux开机应用程序自动启动脚本设置

一、脚本放置目录

1.使用命令查看Linux开发板或者Ubuntu的目录

不管是开发板还是unbuntu都有相同的目录

2.进入etc目录中的自动启动脚本目录

放了很多脚本:也可以放任何东西,但是只开机执行脚本

3.脚本的写法

shell脚本不一定需要以 .sh 结尾命名。.sh 后缀通常用于标识一个文件是一个 shell 脚本,但并不是强制要求。实际上,任何文本文件都可以包含 shell 脚本,只要文件中的内容遵循了 shell 脚本语法规则。

可以使用任何你喜欢的文件名来命名你的 shell 脚本,只要你确保在脚本中的命令是有效的 shell 命令,并且文件的权限被正确设置为可执行即可。通常,对于 shell 脚本,为了方便识别和管理,还是建议使用 .sh 后缀。


#!/bin/sh    #默认语法
#
# Start lvgl....  #说明脚本的用途
#


start() {
        printf "Starting 100ask lvgl: "
        echo -n -e '\e[?17;14;224c'
        echo 0 > /sys/class/graphics/fbcon/cursor_blink
        start-stop-daemon -S -q -m -b -p /var/run/lvgl.pid \
                    -x /usr/share/lvgl/lvgl_100ask_demo
      [ $? = 0 ] && echo "OK" || echo "FAIL"
}

stop() {
        printf "Stopping lvgl: "
        start-stop-daemon -K -q -p /var/run/lvgl.pid \
                      -x /usr/share/lvgl/lvgl_100ask_demo
        [ $? = 0 ] && echo "OK" || echo "FAIL"
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|reload)
        stop
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?

start() {
        printf "Starting 100ask lvgl: "
        echo -n -e '\e[?17;14;224c'
        echo 0 > /sys/class/graphics/fbcon/cursor_blink
        start-stop-daemon -S -q -m -b -p /var/run/lvgl.pid \
                    -x /usr/share/lvgl/lvgl_100ask_demo
      [ $? = 0 ] && echo "OK" || echo "FAIL"
}

这是脚本里面的函数:执行这个脚本打印输出:printf "Starting 100ask lvgl: "

在这个脚本中,echo -n -e '\e[?17;14;224c'这行命令的作用是发送控制序列到终端。让我们来解释一下它的组成部分:

  • echo: 是一个常见的命令,用于在终端中打印文本。
  • -n: 这个选项告诉echo不要在输出后添加换行符。
  • -e: 这个选项告诉echo解释反斜杠转义字符。
  • '\e[?17;14;224c': 这是一个控制序列,用于控制终端的行为。在这个控制序列中,\e表示转义字符(ASCII码为27),后续的内容描述了要发送的特定命令。在这个序列中:
    • [?17;14;224c 是一系列控制码的组合,用于设置终端的一些特性。具体地:
      • ?17: 表示设置光标闪烁方式。
      • ;: 用于分隔不同的参数。
      • 14: 表示禁止光标闪烁。
      • ;: 同样用于分隔不同的参数。
      • 224: 是一个特定的参数,可能指示终端的某种特性或行为。

echo 0 > /sys/class/graphics/fbcon/cursor_blink:这行命令的作用是将数字 0 写入文件 /sys/class/graphics/fbcon/cursor_blink 中。在 Linux 系统中,/sys 目录是一个虚拟文件系统,它提供了对内核和硬件的访问。在这个目录下,/sys/class/graphics/fbcon/cursor_blink 是一个特定文件,用于控制光标的闪烁。通过将数字 0 写入这个文件,通常意味着禁用光标的闪烁。

start-stop-daemon -S -q -m -b -p /var/run/lvgl.pid \
                    -x /usr/share/lvgl/lvgl_100ask_demo:

这行命令使用了 start-stop-daemon,它是一个用于在 Unix 系统上启动和停止守护进程(daemon)的工具。

解释一下每个参数的含义:

  • -S: 意味着启动守护进程。
  • -q: 安静模式,即不显示任何输出。
  • -m: 以指定的用户或组身份启动进程。一般情况下,这意味着在启动过程中通过 setuidsetgid 将进程的用户或组身份更改为指定的用户或组身份。
  • -b: 启动守护进程,并立即返回控制权,即使守护进程尚未完全启动也不等待。这通常用于后台启动守护进程,使脚本可以继续执行而无需等待守护进程启动完成。
  • -p /var/run/lvgl.pid: 将守护进程的 PID(进程 ID)写入指定的 PID 文件,这个文件在 /var/run 目录下,文件名为 lvgl.pid。PID 文件通常用于跟踪守护进程的进程 ID。
  • -x /usr/share/lvgl/lvgl_100ask_demo: 指定要启动的守护进程的可执行文件的路径,这里是 /usr/share/lvgl/lvgl_100ask_demo

综上所述,这行命令的作用是以安静模式启动一个守护进程,使用指定的用户或组身份,将它作为后台进程启动,并将它的 PID 写入指定的 PID 文件中。它启动的进程是 /usr/share/lvgl/lvgl_100ask_demo

[ $? = 0 ] && echo "OK" || echo "FAIL"

这行命令使用了一种简单的逻辑结构,主要是为了根据上一个命令的执行结果来决定接下来执行的操作。

  • [$? = 0]: 这是一个条件判断,$? 是一个特殊的变量,保存了上一个命令的退出状态码。0 表示上一个命令执行成功,其他的非零值表示上一个命令执行失败。因此,这个条件判断检查上一个命令的退出状态码是否为 0。

  • &&: 这是一个逻辑运算符,表示如果前一个命令执行成功(返回退出状态码为 0),那么执行下一个命令。

  • ||: 这也是一个逻辑运算符,表示如果前一个命令执行失败(返回退出状态码非 0),那么执行下一个命令。

  • echo "OK": 如果上一个命令的退出状态码为 0,即上一个命令执行成功,则打印 "OK"。

  • echo "FAIL": 如果上一个命令的退出状态码非 0,即上一个命令执行失败,则打印 "FAIL"。

stop() {
        printf "Stopping lvgl: "
        start-stop-daemon -K -q -p /var/run/lvgl.pid \
                      -x /usr/share/lvgl/lvgl_100ask_demo
        [ $? = 0 ] && echo "OK" || echo "FAIL"
}
  1. printf "Stopping lvgl: ":打印消息 "Stopping lvgl: ",提示即将停止 lvgl 进程。

  2. start-stop-daemon -K -q -p /var/run/lvgl.pid -x /usr/share/lvgl/lvgl_100ask_demo:使用 start-stop-daemon 工具停止 lvgl 进程。具体参数含义如下:

  • -K:命令 start-stop-daemon 来杀死一个守护进程。
  • -q:安静模式,即不显示任何输出。
  • -p /var/run/lvgl.pid:指定 PID 文件的路径,用于识别要停止的进程。
  • -x /usr/share/lvgl/lvgl_100ask_demo:指定要停止的进程的可执行文件路径。

3.[ $? = 0 ] && echo "OK" || echo "FAIL":检查上一个命令的退出状态码,并根据结果打印相应的消息。

  • [ $? = 0 ]:检查上一个命令的退出状态码是否为 0。$? 是一个特殊的变量,保存了上一个命令的退出状态码。
  • &&:如果上一个命令的退出状态码为 0,则执行下一个命令。
  • echo "OK":如果上一个命令的退出状态码为 0,则打印 "OK",表示停止 lvgl 进程成功。
  • ||:如果上一个命令的退出状态码不为 0,则执行下一个命令。
  • echo "FAIL":如果上一个命令的退出状态码不为 0,则打印 "FAIL",表示停止 lvgl 进程失败。
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|reload)
        stop
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?

这段代码是一个 case 结构,根据输入的参数 $1 来执行不同的操作。

  • case "$1" in:开始一个 case 结构,将输入的第一个参数 $1 作为判断条件。

  • start):如果输入的参数是 start,则执行以下操作:

    • start:调用名为 start 的函数。
  • stop):如果输入的参数是 stop,则执行以下操作:

    • stop:调用名为 stop 的函数。
  • *):如果输入的参数既不是 start 也不是 stop,则执行以下操作:

    • echo "Usage: $0 {start|stop|restart}":打印一条帮助消息,说明正确的使用方式。
    • exit 1:退出脚本,并返回退出状态码 1,表示脚本执行失败。
  • esac:结束 case 结构。

  • exit $?:退出脚本,并返回上一个执行命令的退出状态码。这里的 $? 是一个特殊变量,保存了上一个命令的退出状态码。

  • 49
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值