web-dev-qa-db-ja.com

DHCPが起動時にIPアドレスを割り当てた後にスクリプトを実行するにはどうすればよいですか?

Raspberry Piへのログインの自動化を支援するために、現在のIPをGoogleドライブフォルダーに送信するシェルスクリプトを作成しました。ラップトップの別のスクリプトがIPを取得してログインします。スクリプトはコマンドラインから実行すると正常に機能しますが、IPが割り当てられた後、起動時に実行できません。

Crontabを試しましたが、IPが割り当てられる前にスクリプトが実行されます。タイマーを設定したり、whileループを使用してIPを待機したりしたくないのですが、あまり効率的ではありません。 DHCPの実行後に、起動プロセス中にスクリプトを実行しようとしています。 allinterfaceup()関数でupstartにパスを追加しようとしましたが、それも機能しませんでした。助けていただければ幸いです。

Raspberry Pi 3、Ubuntu Mate 16.04 LTS

脚本:

#!/bin/sh

#if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ] )
#then

        echo `hostname -I | cut -d' ' -f1 ` > ~/ipAddr/ip.txt

        rclone copy ~/ipAddr/ip.txt remote:pi 
#fi
2
dpoiesz

フック


これを行う方法は多数あります。

DHCPの実行後にスクリプト「」を実行する場合、hooksが適切です!

dhclientは、終了後にディレクトリ/etc/dhcp/dhclient-exit-hooks.d/内のすべてを実行します。*

スクリプトをディレクトリに配置するのではなく、ディレクトリにリンクすることをお勧めしますが、両方とも機能します。

ln -s /path/to/your/script  /etc/dhcp/dhclient-exit-hooks.d/name_of_your_script

(*)ただし、dhclientは本質的に「終了」せず、何かを行うたびにこのディレクトリを実行および実行(「ソース」)し続けます 理由

したがって、スクリプトが何度も実行されることを禁止するには、次のようにIPアドレスがバインドまたは更新されている場合にのみ、スクリプトを「ifステートメント」でラップして実行することをお勧めします。

if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ])
then

# your script commands here

fi
4
Robert Riedl