
私の仮想マシンは Linux 上でインターネット接続を失うことがあるため、常に接続しておく必要があります。そこで、次のスクリプトを作成しました。
#!/bin/bash
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
service network-manager restart
fi
このスクリプトをコンソールで実行すると動作しますが、次のようにcron
なります:
network-manager: unrecognized service
これを実現するにはどうすればいいでしょうか、あるいは他にどのようなアプローチが役立つでしょうか?
- - - - - - - - 解決 - - - - - - - -
コンソールで起動すると機能するが、コンソールで実行したタスク中には機能しない理由を知るにはcron
:
echo $PATH
次に次のように表示されます:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
そこでスクリプトを次のように編集します。
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
service network-manager restart
fi
そして、それは今機能します!
答え1
Linux Mint に似たディストリビューションを使用していると仮定します...
「サービス」プログラムは実行する「ネットワーク マネージャ」スクリプトを見つけられないようです。/etc/init または /etc/init.d を検索するので、そこで何が利用できるか確認できます。
または、オートコンプリートで表示されるかどうかを確認します (私の意見では、その方が簡単です)。ターミナルを開いて次のように入力します。
service net
数回入力するとTAB、「networkign」のような名前が自動補完され、次のような使用可能なオプションも表示されます。
$ service networking
force-reload reload restart start stop
したがって、次の使用を試みることができます (sudo
スクリプトがまだルートになっていない場合に必要になる場合があります)。
service networking restart
また、ping
ダウンロードを試みることなく、1 分ごとに Google などのサイトにアクセスして、ネットワークがまだ稼働しているかどうかを確認することもできます。
VM のバグや奇妙な設定がないか確認してみてください。通常、ホスト コンピューターがネットワーク接続を失わない限り、VM のネットワーク接続は失われません...