一切完成后,在启动时以 root 身份运行脚本

一切完成后,在启动时以 root 身份运行脚本

我有一个 IoT 设备,上面有一个准系统 Linux 发行版。不crontab,,chkconfigupdate-rc

当设备启动时,设备上的所有内容都已加载后,我将如何运行脚本?我以为我可以添加脚本,/etc/init.d但似乎什么也没有发生。这是我正在使用的脚本。

#! /bin/sh -e
# /etc/init.d/camstart

. /etc/init.d/functions.sh

start() {
    /usr/local/packages/application/myapp
}

stop() {
    kill `pidof myapp`
    kill `pidof myappinternal`
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        pidof myapp
        pidof myappinternal
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0

我的另一个想法是使用/etc/rc.local,但设备没有该文件。它有rc?.d从 1-6 到 S 的文件夹。将脚本放在其中任何一个中似乎都没有任何影响。

有什么建议么?

编辑:我不确定它是什么 Linux 发行版,但检查/etc/*release告诉我它是基于 Yocto 项目的 Poky 的。从/proc/versionLinux 版本 4.9.62 开始。

据我所知,它用于systemctl启动systemd服务。

EDIT2:忘了提及。我尝试systemd为我的脚本编写一个服务并使用它启动它systemctl start app,但它立即退出exit code 0

应用程序服务器:

[Unit]
Description=app
After=acap-pre.target
Requires=acap-pre.target

[Service]
Slice=extension-acap.slice
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/app start
ExecStop=/etc/init.d/app stop

最终编辑:查看后可以正常工作如何编写systemd的启动脚本发现我的systemd service失踪了

[Install]
WantedBy=multi-user.target

答案1

在运行级别 3 中自动启动守护进程的过程很简单:

  1. 将您的脚本放入/etc/init.d
  2. 检查脚本的权限和所有权,
  3. /etc/rc3.d使用以下名称创建到脚本的符号链接S99scriptmame

办法S启动服务。该数字用于对服务启动顺序进行排序,从01(高优先级脚本)到99(最后优先级脚本)。

/etc/rc0.d也许,您是否需要在名为 的(停止)和/etc/rc6.d(重新启动)中创建脚本的链接K01scriptname。通常最后启动的守护进程是第一个被停止的。

man init.d^1以获得完整的解释。

相关内容