crontabで@rebootを実行するbashスクリプトがあります。
スクリプト自体には、インターネットからファイルを抽出してダウンロードするためのwgetコマンドが含まれています。
ログインして端末を開いた後、スクリプトを実行すると正常に動作し、ファイル(html、png)が正しく保存されます。ただし、システムを再起動すると、実行は保存され、内容のないプレーンテキストファイルとして保存されます。
解決済み
--> crontabの省電力機能を使用しましたが、うまくいきました!
Linuxとコーディングが初めての方々のフィードバックに心から感謝します! /etc/network/if-up.d/オプションも見てみましょう。
答え1
問題はほぼもちろん、@reboot
クローン操作はネットワークインターフェイスが表示される前に開始されますup
。通常、これはよく文書化された欠点ですcron
。これは、その施設が役に立たないという意味ではなく、@reboot
あなたの場合のように、その施設がどのように機能し、失敗した場合の修正方法を理解する必要があることを意味します(おそらく:).
これを行う方法は少なくとも2つあります。
sleep
ネットワークに取得する時間をさらに提供するために@reboot操作に使用されますup
。crontab
項目は次のとおりです。
@restartsleep10;/your/bash/scripts/now
ここで私が推奨する値は、10
インターフェイスに10秒を与えることですup
。 YMMV、だから別の値を試してみてください。
- @confettiの提案に従って(そして@Celadaに感謝します)スクリプトを
/etc/network/if-up.d
。システムが最初に起動したときにのみ実行されます(つまり、@reboot
ネットワークインタフェースが起動されるたびに実行されるわけではありませんup
)。
#!/bin/sh
NWKSTATUS=/var/run/the-network-is-up
# /var/run は一時ファイルシステムなので、システムをシャットダウンすると
# フラグファイル "the-network-is-up" が効果的に削除されます。case "$IFACE" in
lo) # ループバックインターフェイスを除外します。 #実際のインターフェースではないので
考慮しません。物理ネットワークインターフェイスが存在する場合にのみこのフラグを設定します。
#exit 0 *);;#フラグファイルが存在する場合、操作は完了です
。 #そうでなければ生成します。if [ -e $NWKSTATUS ]; 0 を終了して
else
touch $NWKSTATUS
fi#ここにスクリプトを追加してください...
したがって、上記のすべての内容をファイルに入れて(たとえば)setnwkstatus.sh
フォルダに保存し、/etc/network/if-up.d/
実行可能にします(例sudo chmod /etc/network/if-up.d/setnwkstatus.sh
:)
答え2
cron
最も可能性の高い問題は、スクリプトを実行しようとするとネットワークインタフェースが機能しないことです。
ネットワークインタフェースの起動後にスクリプトを実行できます。
スクリプトを挿入して実行できるように/etc/network/if-up.d
設定します。chmod +x
ネットワークインターフェイスが表示されるたびに、その中のすべてのスクリプトが実行されます。