AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 9563
In Process
mrTomahawk
mrTomahawk
Asked: 2009-05-19 10:03:24 +0800 CST2009-05-19 10:03:24 +0800 CST 2009-05-19 10:03:24 +0800 CST

rc.local 中的 bash 代码在启动后未执行

  • 772

有谁知道为什么系统不会在启动时执行 rc.local 中的脚本代码?我有一个配置后的 bash 脚本,我想在初始安装 VMware ESX(Red Hat)后运行它,但由于某种原因,它似乎没有执行。我有设置来记录它的执行开始,甚至它的进度,这样我就可以看到它在某个时候失败的情况下能走多远,但即使我查看那个日志,我发现它甚至没有开始脚本代码的执行。我已经检查了该脚本是否具有执行权限(755),我还应该查看什么?

这是我的代码的前几行:

#!/bin/sh
echo >> /tmp/configLog ""
echo >> /tmp/configLog "Entering maintenance mode"
virtualization linux unix bash vmware-esx
  • 10 10 个回答
  • 14407 Views

10 个回答

  • Voted
  1. Justin Ellison
    2009-08-06T19:26:33+08:002009-08-06T19:26:33+08:00

    那么,/tmp/configLog 存在吗?如果是这样,你的脚本正在触发,它只是在某个地方死去。

    从基础开始:

    1. 像这样在 /etc/rc.local 中放置一个简单的单行代码。
      触摸 /tmp/itworked
      那行得通吗?重新启动后,/tmp/itworked 是否存在?如果是这样,那么 rc.local 正在被执行。
    2. 另一个常见的问题是,如果你的脚本是一个守护进程,它要么需要处理分叉到后台,要么需要在 rc.local 中作为后台。如果你的脚本是 /bin/myscript,那么 rc.local 应该有:
      /bin/myscript &
      在里面。运行时间长吗?初始化脚本中的某处可能会出现超时,以防止用户停止引导过程 - 如果存在该过程,后台处理将帮助您解决这个问题。
    3. 如果“触摸”有效,并且您正在后台运行,则它必须在您的脚本中的某个地方。当你跑步时它会做什么
      /bin/sh /etc/rc.local
      从命令行?
    4. 就像 Jason 所说,检查 dmesg 以及 /var/log/messages 是否有任何线索。
    5. 当脚本从 rc.local 运行时,它不会具有您的 root 用户在登录时所拥有的完整环境变量集 - 例如 $PATH 可能不同。不要依赖 $PATH。您还可以通过安排一个接近模拟环境的“at”作业来测试您的脚本。
    • 4
  2. x3ja
    2009-05-23T00:47:12+08:002009-05-23T00:47:12+08:00

    这不是像错字这样简单的事情吗?应该这样:

    #!/bin/hash

    真的是:

    #!/bin/bash

    ?

    (就像CK在评论中说的,现在我看)

    • 1
  3. carlito
    2009-05-24T10:55:32+08:002009-05-24T10:55:32+08:00

    你确定你的系统支持 rc.local 吗?如果没有记录,您将需要遵循所有的初始化脚本。您从 /etc/inittab 开始。(您可能会发现从那里转到 /etc/rc.d/rc)

    在某些系统上,通过符号链接 /etc/rc.d/rcX.d/S99local 支持 /etc/rc.d/rc.local。(其中 X 是适当的运行级别)。

    如果您使用的是 RedHat,则没有真正的理由不创建自己的初始化脚本,将其添加到 /etc/rc.d/init.d,chkconfig --add 脚本,并在脚本上添加 chkconfig。这将使正确的符号链接进入 /etc/rc.d/rcX.d 目录,并使初始化脚本易于部署或禁用。

    如果您的系统确实支持它,使用过时的 rc.local 可以快速破解它,但它并不适合重要或永久的东西。

    • 1
  4. Chaim Geretz
    2011-01-04T08:30:02+08:002011-01-04T08:30:02+08:00

    不确定 linux 上的 init 脚本处理是顺序的还是并行的,但 Solaris 系统会按顺序启动脚本。如果早期的初始化脚本还没有完成(我有时会因为 sendmail/DNS 依赖而看到这一点),那么后面的初始化脚本不会像你想象的那样快速启动。

    使用 ps 查看早期的初始化脚本是否仍在运行。

    • 1
  5. Dave K
    2009-05-19T10:08:33+08:002009-05-19T10:08:33+08:00

    rc.local 脚本中可能存在语法错误。如果您在系统启动后尝试从命令行手动运行它,它是否正确执行?

    • 0
  6. Nik Reiman
    2009-05-19T10:09:58+08:002009-05-19T10:09:58+08:00

    您是否检查过包含 rc.local 文件的目录的权限?

    • 0
  7. Ian Kelling
    2009-05-19T10:26:59+08:002009-05-19T10:26:59+08:00

    你的代码不应该看起来更像这样吗?这里有 3 处变化:

    #!/bin/bash
    echo "" >> /tmp/configLog
    echo "Entering maintenance mode" >> /tmp/configLog
    
    • 0
  8. pcapademic
    2009-05-21T00:00:52+08:002009-05-21T00:00:52+08:00

    rc.local 是运行启动脚本的 BSD 方式。尽管许多 Linux 版本确实支持在启动时运行一个名为“rc.local”的文件,但我记得这些需要一堆符号链接和其他粘合剂才能工作,因为 Linux 遵循 Solaris 处理启动脚本的方式。

    • 0
  9. Jason Tan
    2009-06-18T23:06:09+08:002009-06-18T23:06:09+08:00

    SELinux。

    尝试 getenforce 以查看 selinux 是否已打开。如果打开,它将返回 1 或强制执行。然后,如果检查 dmesg 以查看是否存在与 selinux 相关的错误,看起来可能与您的脚本有关。

    • 0
  10. Tom Bascom
    2009-06-19T09:45:53+08:002009-06-19T09:45:53+08:00

    如果第一行真的说 #!/bin/hash 那么你会得到一个类似这样的错误:

    -bash: ./test.sh: /bin/hash: bad interpreter: No such file or directory
    

    当它运行时。

    您可能还想检查脚本是否具有执行权限。

    • 0

相关问题

  • 更改 PHP 的默认配置设置?

  • 有什么软件可以模拟局域网?

  • 保护新的 Ubuntu 服务器 [关闭]

  • 为什么 Virtual PC 与 Windows 7 捆绑在一起很重要?[关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve