【问题标题】:Disabled network when execute a bash script at runlevel 0在运行级别 0 执行 bash 脚本时禁用网络
【发布时间】:2014-08-01 19:18:43
【问题描述】:

当我关闭我的电脑时,我正在运行一个脚本。我正在运行 ubuntu 14.04,并且在“/etc/init.d/”中有我的脚本“save_log.sh”。该脚本具有执行权限(sudo chmod +x /etc/init.d/save_log.sh)。我还在“/etc/rc0.d/”中创建了一个目标为“/etc/init.d/save_log”的链接。

我已经测试过这个脚本在关闭我的笔记本电脑时正在运行(一块但正在运行)。

我正在尝试保存日志文件并上传到 S3(亚马逊网络服务)。对于这个任务,我正在制作一个“tar.gz”,其中包含具有特定文件名的所有日志文件。此文件名取决于服务器(或笔记本电脑)的 IP。

当我在控制台中运行此脚本时,该脚本运行成功,并且该文件使用包含 IP(我的笔记本电脑)的文件名创建,并且该文件已上传到 S3。当我关闭笔记本电脑时,文件已创建,但名称没有 IP 且文件未上传。

我为此脚本创建了一个日志,并为 ifconfig 命令添加了输出:

ifconfig: lo Link encap:Local Loopback inet addr:127.0.0.1 掩码:255.0.0.0 inet6 地址:::1/128 范围:主机 UP LOOPBACK RUNNING MTU:65536 指标:1 RX 数据包:6432 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:6432 错误:0 丢弃:0 超限:0 运营商:0 冲突:0 txqueuelen:0 RX 字节:1159509 (1.1 MB) TX 字节:1159509 (1.1 MB)

此输出没有网络 IP。在runlevel0中,网络是否被禁用?可以激活吗?有解决问题的办法吗?

更新

我的 /etc/rc0.d/ (ubuntu 14.04) 中的内容:

eltortuganegra@eltortuganegra:~$ ll /etc/rc0.d/
total 20
drwxr-xr-x   2 root root  4096 jun 11 16:31 ./
drwxr-xr-x 152 root root 12288 jun 12 09:07 ../
lrwxrwxrwx   1 root root    24 jun 11 13:29 K01save_logs -> /etc/init.d/save_logs.sh*
lrwxrwxrwx   1 root root    17 jun  9 10:27 K09apache2 -> ../init.d/apache2*
lrwxrwxrwx   1 root root    29 jun  9 10:14 K10unattended-upgrades -> ../init.d/unattended-upgrades*
lrwxrwxrwx   1 root root    20 jun  9 10:14 K20kerneloops -> ../init.d/kerneloops*
lrwxrwxrwx   1 root root    19 jun  9 11:35 K20memcached -> ../init.d/memcached*
lrwxrwxrwx   1 root root    15 jun  9 10:14 K20rsync -> ../init.d/rsync*
lrwxrwxrwx   1 root root    27 jun  9 10:14 K20speech-dispatcher -> ../init.d/speech-dispatcher*
lrwxrwxrwx   1 root root    22 jun 11 11:07 K21spamassassin -> ../init.d/spamassassin*
-rw-r--r--   1 root root   353 mar 13 02:33 README
lrwxrwxrwx   1 root root    18 jun  9 10:14 S20sendsigs -> ../init.d/sendsigs*
lrwxrwxrwx   1 root root    17 jun  9 10:14 S30urandom -> ../init.d/urandom*
lrwxrwxrwx   1 root root    22 jun  9 10:14 S31umountnfs.sh -> ../init.d/umountnfs.sh*
lrwxrwxrwx   1 root root    18 jun  9 10:14 S40umountfs -> ../init.d/umountfs*
lrwxrwxrwx   1 root root    20 jun  9 10:14 S60umountroot -> ../init.d/umountroot*
lrwxrwxrwx   1 root root    14 jun  9 10:14 S90halt -> ../init.d/halt*

我在 Debian 发行版中修改了 rc0.d 目录,我发现:

K06networking -> ../init.d/networking

我想这是为停止网络执行的链接,但在我的 Ubuntu 中,此链接不存在。我想如果我用 K07 下的数字重命名我的链接,那么网络将被启用,我的脚本“save_logs.sh”将正常运行。

我如何知道网络何时被禁用或如何在网络被禁用之前执行我的脚本?

【问题讨论】:

    标签: bash ubuntu networking runlevel


    【解决方案1】:

    是的,网络将被禁用。您需要在网络被禁用之前运行您的脚本。它通常会在您引导到的同一运行级别中禁用自身。

    作为 SUSE linux 系统上的示例,请查看:

    test01:/etc/rc.d # ls -latd *rc*/*network*
    lrwxrwxrwx 1 root root 10 Feb  3  2009 rc2.d/K17network -> ../network
    lrwxrwxrwx 1 root root 10 Feb  3  2009 rc2.d/S05network -> ../network
    lrwxrwxrwx 1 root root 10 Feb  3  2009 rc3.d/K17network -> ../network
    lrwxrwxrwx 1 root root 10 Feb  3  2009 rc3.d/S05network -> ../network
    lrwxrwxrwx 1 root root 10 Feb  3  2009 rc5.d/K17network -> ../network
    lrwxrwxrwx 1 root root 10 Feb  3  2009 rc5.d/S05network -> ../network
    test01:/etc/rc.d #
    

    (您的目录可能因您使用的 linux 而异)

    您会注意到网络脚本的启动和停止处于同一运行级别。在我的例子中,如果我启动到运行级别 3,启动和停止发生在运行级别 3。启动是 S05,停止是 K17。

    事情是按数字顺序运行的,所以如果我要在我的运行级别 3 的机器上运行你的日志记录脚本,我想把它放在 K16。

    或者为了安全起见,我会为所有三个运行级别创建日志记录脚本

    rc2.d/K16logging
    rc3.d/K16logging
    rc5.d/K16logging
    

    这有帮助吗?

    【讨论】:

    • 嗨,本!我的笔记本电脑中有 ubuntu 14.04。我在 /etc/rc0.r/K01save_logs.sh 中创建了符号链接,该链接的目标是“/etc/init.d/save_logs.sh”
    • 这个链接的目标是“/etc/init.d/save_logs.sh”。我已经编辑了添加此信息的问题。然后,我认为符号链接和目标链接的名称是正确的。如果我只想在机器关闭时运行这个脚本,那么我应该只使用 /etc/rc0d/,对吗?谢谢你!
    • 当然可以,只要意识到你怀疑网络将在此之前关闭,因为所有 /etc/rc[runlevel].d/K* 脚本将首先运行。所以你需要另一个技巧来在接口上放一个 IP 地址,然后把它取下来。
    • 嗨,本!我在 rc2.d、rc3.d、rc4.d 和 rc5.d 文件夹中创建了另一个链接,现在我可以从 ifconfig 语句中获取 IP。我糊涂了。如果我登录了我的 ubuntu 桌面(我想那不是运行级别 1、2、3、4 或 5?)并且我打开控制台并执行关机指令,系统是否更改为运行级别 0?
    • 我在做测试,并验证如果我从控制台关闭,脚本“save_log.sh”会执行 2 次。在 rc0.d 和 rcX.d 中,X 是我桌面的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2013-07-13
    相关资源
    最近更新 更多