【问题标题】:Run Linux Shell Script On Boot在启动时运行 Linux Shell 脚本
【发布时间】:2019-01-18 07:21:30
【问题描述】:

我有一个要在启动时运行的 Shell 脚本。每次我启动设备时,它都会在后台运行脚本。 该脚本包含一个 while true 循环,并假设持续运行,至少在设备关闭之前。这是脚本:

#!/bin/bash

cd /home/.../
while true 
do 
  sh ./update_logs.sh
sleep 1
done

经过大量搜索后,我想出了太多的信息,这让我脑子里有了沙拉。有人建议我进入此文件夹 /etc/init.d 并使用如下所示的特殊模式(符合 LSB)将我的脚本放在那里:

!#/bin/sh

start () {
    echo "application started";
    ./helloworld  # you should use an absolute path here instead of ./
}

stop () {

}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo "Usage start|stop";
esac

exit $?

通过 chmod +x 使脚本可执行,然后通过键入 ln -s /etc/rc.d/init.d/run_update.sh /etc/init.d/rc5.d/S90run_update 为文件创建符号链接

这应该是“硬方法”,而“简单方法”是将我的脚本放在文件夹 /etc/rc.local 中,它将在主启动过程之后启动我的脚本。

嗯,我没有这种文件夹。我在etc 文件夹中拥有的是rc.d,它会导致子文件夹:init.drc0.drc1.drc2.d...rc6.d

如果通过编写上面的代码来解决问题,那么我需要在其中包含的最低限度是多少?因为我看到了不同类型的代码,其中包括带有描述和运行级别的### 我有一个 Linux Red Hat 4.6.3-2。

【问题讨论】:

  • 查看/etc/rc.d。应该有一个rc.local。如果没有,您可以创建一个。换句话说,您需要一个脚本文件/etc/rc.d/rc.local,而不是文件夹/etc/rc.local
  • 我在想我可能需要创建 rc.local。操作系统熟悉的东西?我只是使用“vi”创建一个?
  • 是的,操作系统知道这一点。
  • 不知道你的脚本实际上做了什么:你不能安排它——例如——每分钟运行一次吗? (你可以用 cron 来做到这一点)
  • 您正在运行哪个发行版?您说的是 Red Hat 4.6.3-2,但这不太可能是正确的。 /etc/redhat-release 说什么?

标签: linux shell redhat boot rc


【解决方案1】:

在 DEBIAN 脚本中应该有在顶部

#!/bin/sh    
### BEGIN INIT INFO
# Provides:          SCRIPT_NAME_HERE_NO_PATH
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

....

那么在shell中必须启用rc系统链接

update-rc.d SCRIPT_NAME_HERE_NO_PATH defaults
update-rc.d SCRIPT_NAME_HERE_NO_PATH enable

【讨论】:

    【解决方案2】:

    好的,我想我明白了。 启动一个 konsole 会话,然后查找一个名为 .bash_profile 的隐藏文件。如果您在主目录中找不到它,则它不会退出。使用 pico 创建它(使用 pico .bash_profile)。 如果文件存在,请使用脚本链接对其进行编辑。 下次您登录系统时,该文件将运行。

    希望这会有所帮助。

    【讨论】:

    • 我也会试试你的解决方案。幸运的是,先前使用 rc.local 文件的解决方案是最好的解决方案。第一个问题是我的 rc.d 目录中没有这个文件。最终我明白我可以自己创建这个文件,最终解决了这个案例。
    【解决方案3】:
    1. Add below lines in intit.rc: 
      chmod 0755 /system/bin/shellscript_name  //giving permissions to your shell_script
      start name_your_service      //starting your shellscrip
    
      service name_your_service /system/bin/shellscript_name     
          class main
          user root
          group shell system 
          seclabel u:r:shell:s0
          disabled
    
    
    2. Goto the vendor directory and create your shell script under system/bin/shellscript_name.
    
    3. Add your shell script under Android MakeFile:
    include $(CLEAR_VARS)
    LOCAL_MODULE        := module_name
    LOCAL_MODULE_OWNER  := owner_name
    LOCAL_MODULE_TAGS   := optional
    LOCAL_MODULE_CLASS  := EXECUTABLES
    LOCAL_SRC_FILES     := path to your .sh
    LOCAL_MODULE_PATH   := $(PRODUCT_OUT)/system/bin/
    include $(BUILD_PREBUILT)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      相关资源
      最近更新 更多