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.d
或 systemctl enable ...
等任何更新机制只会设置此类链接以在启动时生成脚本 avaiable/called。
希望这对您有所帮助。问候
好的,终于找到问题了,感谢@tasasaki这样的用户。发生的事情是我在 /etc/rc.local
中添加了一行,它使用 完整 路径名称调用我的 bash 脚本,并将 bash 脚本编辑为具有 完整 路径名。另外,在 rc.local
中,我没有意识到 exit 0
只被放下一次,所以我把我的代码放在 exit 0
之后。向上移动它可能也有帮助。如果有人找到这个,希望对您有所帮助!
我知道,我知道。这些帖子 全部 都出现了该死的时间。我发誓,我的 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.d
或 systemctl enable ...
等任何更新机制只会设置此类链接以在启动时生成脚本 avaiable/called。
希望这对您有所帮助。问候
好的,终于找到问题了,感谢@tasasaki这样的用户。发生的事情是我在 /etc/rc.local
中添加了一行,它使用 完整 路径名称调用我的 bash 脚本,并将 bash 脚本编辑为具有 完整 路径名。另外,在 rc.local
中,我没有意识到 exit 0
只被放下一次,所以我把我的代码放在 exit 0
之后。向上移动它可能也有帮助。如果有人找到这个,希望对您有所帮助!