Linux 脚本不会 运行 重新启动

Linux Script not Running Upon Reboot

我知道,我知道。这些帖子 全部 都出现了该死的时间。我发誓,我的 machine/code 是大多数人在尝试设置这些看似简单的脚本时 accomplish/what 遇到的 运行 问题的例外。

我的 Raspberry Pi 上有一个名为 IPdetermination.rb 的文件(运行 宁 Raspbian OS)基本上使用 rest-client ruby gem 与 JSON 执行 http POST。代码如下:

#sends a message to slack using incoming-webhook that identifies that
#host machine's name and ip address.
require 'rest-client'
address = Socket.ip_address_list.detect {|x| x.ipv4_private?}.ip_address
name = Socket.gethostname
if name.include? '.' then name = name.slice(0..name.index('.') - 1) end
payload = {text: "*Device:* `#{name}`\n *IP:* `#{address}`"}.to_json
RestClient.post 'https://hooks.slack.com/services/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', payload

请注意,这 确实 有效。所以,实际上,这个 bash 脚本,它存储在 /etc/init.d

#! /bin/bash
# /etc/init.d/ip_addr

### BEGIN INIT INFO
# Provides:          ip_addr
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: ip address locator
# Description:       sends hostname's ip address on private slack channel
### END INIT INFO
exec ruby ~/Documents/coding/ruby/IPdetermination.rb
exit 0

他们都在手动执行时工作,成功地在 Slack 上发布了一条消息。请注意,我已将 LSB 注释附加到 ip_addr 脚本并配置了文件,以便 运行ning ls -l returns -rwxr-xr-x 1 root root 413 Dec 30 03:39 ip_addr。 运行 chkconfig --list 正确显示 ip_addr 0:off 1:off 2:on 3:on 4:on 5:on 6:off

没用!重启系统好像没有运行这个脚本。我唯一的推测可能是 POSTing 在重新启动时可能出现故障,但我无法确定这是否是问题的根源。我该怎么办?

编辑:将 Required-Start:Required-Stop: 更改为还包含启动工具 $network$named 也没有用。

/etc/init.d/ 下的afaik 脚本不会在重启时执行。至少需要在 运行 级目录 /etc/rc*.d/ 中设置符号链接,如果你想在输入特定 运行水平。如果以 K 为前缀,则表示类似于 kill,因此它不会在启动时执行或在关机时被杀死。附加到这些主要前缀的数值让您可以定义脚本在启动时的顺序 运行。

所以如果你想 运行 ascript 在进入 运行 二级时启动,你需要做一些事情:

$ ln -s /etc/init.d/ascript /etc/rc2.d/S01ascript

这将导致 ascript 在进入 运行 级别 2 时首先 运行。 update-rc.dsystemctl enable ... 等任何更新机制只会设置此类链接以在启动时生成脚本 avaiable/called。

希望这对您有所帮助。问候

好的,终于找到问题了,感谢@tasasaki这样的用户。发生的事情是我在 /etc/rc.local 中添加了一行,它使用 完整 路径名称调用我的 bash 脚本,并将 bash 脚本编辑为具有 完整 路径名。另外,在 rc.local 中,我没有意识到 exit 0 只被放下一次,所以我把我的代码放在 exit 0 之后。向上移动它可能也有帮助。如果有人找到这个,希望对您有所帮助!