0

分かってる。これらの投稿は常に表示されます。私のマシン/コードは、これらの一見単純なスクリプトをセットアップしようとするときに、ほとんどの人が達成しようとしている/どのような問題に直面しているのかに対する例外です。

基本的にRuby gemを使用してJSONでhttp POSTを実行するIPdetermination.rbRaspberry Pi(Raspbian OSを実行)で名前が付けられたファイルがあります。rest-clientコードは次のとおりです。

#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 コメントを添付し、running が を返すip_addrようにファイルを構成したことに注意してください。正しく実行すると、 が表示されます。ls -l-rwxr-xr-x 1 root root 413 Dec 30 03:39 ip_addrchkconfig --listip_addr 0:off 1:off 2:on 3:on 4:on 5:on 6:off

まだ

うまくいきません!システムを再起動しても、スクリプトが実行されないようです。私の唯一の理論は、再起動時に POSTing に問題がある可能性があるということですが、これが問題の原因であるかどうかは判断できません。私は何をしますか?

編集: Required-Start:andRequired-Stop:を変更して、ブート機能も含めるようにしましたが、どちらも機能$network$namedませんでした。

4

2 に答える 2

1

/etc/init.d/ の下の afaik スクリプトは、再起動時に実行されません。特定のランレベルに入ったときに起動時にスクリプトを実行する場合/etc/rc*.d/は、ランレベル ディレクトリに少なくともシンボリック リンクを設定する必要があります。S接頭辞が付いている場合Kは kill のようなものを意味するため、起動時に実行されないか、シャットダウン時に強制終了されます。これらのメイン プレフィックスに数値を追加すると、起動時にスクリプトを実行する順序を定義できます。

ascriptしたがって、実行レベル 2 に入るときに起動時に実行したい場合は、次のようにする必要があります。

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

これにより、ランレベル 2 に入ったときにスクリプトが最初に実行されます。起動時にスクリプトが利用可能/呼び出されるように、そのようなリンクを設定したり、設定しupdate-rc.dたりする更新メカニズム。systemctl enable ...

お役に立てれば。よろしく

于 2015-12-30T14:44:50.997 に答える