我知道,我知道。这些帖子显示所有时间。我发誓,我的机器/代码是大多数人试图完成的例外/他们在尝试设置这些看似简单的脚本时遇到的问题。
我的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
也不起作用。
答案 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.d
或systemctl enable ...
这样的更新机制都会设置这样的链接,以便在启动时使脚本可用/被调用。
答案 1 :(得分:0)
好的,终于找到了问题,感谢像@tasasaki这样的用户。发生的事情是我在/etc/rc.local
中添加了一行,其中使用完整路径名称调用了我的bash脚本,并编辑了bash脚本以获得完整路径名称。此外,在rc.local
内,我没有意识到exit 0
只被放下一次,所以我将我的代码放在exit 0
之后。提升它可能也有帮助。如果有人发现这一点,希望它有所帮助!