【问题标题】:"Can't open *.sh" message while booting启动时出现“无法打开 *.sh”消息
【发布时间】:2015-08-13 06:07:35
【问题描述】:

当我在启动时使用 init.d 目录运行脚本 S*.sh 以将其链接到 /etc/rcS.d 时,我收到以下消息:

无法打开文件py.sh

py.sh 包含在S*.sh 中,应该被执行。所有文件都设置为超级用户,并且所有用户都有读、写和执行的权限。当我手动启动S*.sh 时,它工作正常。

这里是S*.sh写的代码:

#!/bin/sh
x=1
while [ $x -le 14400 ]
do
DD=$(date +%d)
MM=$(date +%m)
date >> /home/lasbr/Dokumente/"bmv"$DD$MM".log"
sh /etc/init.d/py.sh &
sleep 60s
x=$(( $x + 1 ))
done 

也许,因为它是手动工作的,它与引导顺序有关。也许 Ubuntu 会尝试在需要运行几个服务来处理脚本之前启动脚本?!

【问题讨论】:

  • 您没有分享大量信息,您的问题令人困惑。您是否可能在没有绝对路径的情况下调用 y.sh 并且 PATH 环境变量不包含路径?
  • 您需要哪些信息?我用绝对路径(/etc/init.d/y.sh)调用y.sh
  • 发布脚本减去所有敏感信息。
  • 什么是S*.sh,是字面意思,是带通配符还是你在责备你的文件名?你到目前为止y.shpy.shS*.sh,这是否意味着你有 3 个单独的脚本?你有错误:Can't open file y.sh,但是你的脚本叫做py.sh,你能提供缺少的信息吗,你怎么称呼这个y.sh或者是错字?
  • 如果你想调试你的脚本,运行-x。例如:#!/bin/sh -x,调用时尝试:sh -x /etc/init.d/py.sh

标签: linux shell startup execution init.d


【解决方案1】:

检查您的包含。您必须在包含中提供完整路径,否则如果您只输入脚本的名称,它将假定该文件应位于当前工作目录中,该目录可能与您的脚本位置不同。

【讨论】:

  • 很好的答案,但它并不完整。通常你应该使用评论,但是由于缺乏声誉,你应该尝试回答一些更明确的问题。
  • 包含是什么意思?路径名不是已经有了(/etc/init.d/py.sh)吗?
【解决方案2】:

直接在 /etc/rc.local 中调用此脚本以在启动时运行它。

/etc/y.sh &>/dev/null &

【讨论】:

    【解决方案3】:

    现在我知道了为什么系统在启动时挂起。 Can't open py.sh 不是主要问题。问题是while 循环,因为脚本没有在后台启动。系统等待while-loop 完成(这需要 10 天),然后继续引导。

    Py.sh 访问设备(电池计算机),并且该设备只能通过正在运行的系统访问。当然它说找不到py.sh,但同时我只是从py.sh中取出代码并认识到系统需要运行才能访问设备。

    现在所有这一切的结果是一个问题:如何在启动时在背景中启动 shell 脚本?

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2018-01-24
      • 2016-06-02
      • 1970-01-01
      相关资源
      最近更新 更多