Linux脚本在重新启动时未运行

时间:2015-12-30 04:15:56

标签: ruby bash api raspbian slack

我知道,我知道。这些帖子显示所有时间。我发誓,我的机器/代码是大多数人试图完成的例外/他们在尝试设置这些看似简单的脚本时遇到的问题。

我的Raspberry Pi(运行Raspbian OS)上有一个名为IPdetermination.rb的文件,它基本上使用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上成功发布消息。请注意,我在ip_addr脚本中附加了LSB注释并配置了文件,以便运行ls -l返回-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

然而

它不起作用!重新启动系统似乎没有运行脚本。我唯一的理论可能是重启后POST可能有问题,但我无法确定这是否是问题的根源。我该怎么办?

修改:更改Required-Start:Required-Stop:也包括引导工具$network$named也不起作用。

2 个答案:

答案 0 :(得分:1)

/etc/init.d/下的afaik脚本在重启时不会执行。如果要在进入特定运行级别时在引导时运行脚本,则至少需要在运行级别目录/etc/rc*.d/中设置前缀为S的符号链接。如果以K作为前缀,则意味着类似于kill,因此它不会在启动时执行或在关机时被杀死。附加到这些主前缀的数值允许您定义脚本在引导时运行的顺序。

所以如果你想在进入运行级别2时在启动时运行ascript,你需要做的事情如下:

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

这将导致在进入运行级别2时首先运行ascript。 任何像update-rc.dsystemctl enable ...这样的更新机制都会设置这样的链接,以便在启动时使脚本可用/被调用。

希望这会有所帮助。问候

答案 1 :(得分:0)

好的,终于找到了问题,感谢像@tasasaki这样的用户。发生的事情是我在/etc/rc.local中添加了一行,其中使用完整路径名称调用了我的bash脚本,并编辑了bash脚本以获得完整路径名称。此外,在rc.local内,我没有意识到exit 0只被放下一次,所以我将我的代码放在exit 0之后。提升它可能也有帮助。如果有人发现这一点,希望它有所帮助!