たとえば、カーネルの更新が可能なときに再起動をスケジュールするためにcronジョブを設定しましたが、次のようにします。Enode API
curl -s https://api.linode.com/v4/linode/kernels/linode/latest-64bit | grep "Latest.*$(uname -r)" > /dev/null
if [ $? -eq 1 ]
then sudo init 6
fi
詳細な変更については、grepコマンドを参照してください。
私のuname -r
出力4.14.12-x86_64-linode92
も比較されます。Enode API
curl -s https://api.linode.com/v4/linode/kernels/linode/latest-64bit | grep "Latest 64 bit *$(uname -r)" > /dev/null
if [ $? -eq 1 ] ; then
systemctl ネットワークの再起動
ベストアンサー1
これには2つの問題があります。
- cURLのセキュリティを絶対に信頼しない限り、通常のユーザーではなくrootとして実行する必要があります。これにより、使用を取り除くことができ、
sudo
デバッグが簡単になります(そして他の変更なしで動作することができます)。 - 通常、この
init
コマンドを使用して再起動を実行するのは誤った形式です。reboot
ほとんどすべての Linux や他の UNIX システムで動作する汎用オプションであり、shutdown -r now
通常は Linux で好まれる方法です。systemctl reboot
Ubuntu 16.04はsystemdを初期化システムとして使用するため、試してみることもできます。
この2つの問題を解決したら、Linode APIと式がgrep
一緒に機能することを心配するだけです。
if
また、これは実際には質問ではありませんが、ほとんどの場合、POSIXシェルスクリプトの一般的なステートメント形式は次のとおりです。
if [ <condition ] ; then
<do something>
fi
いいえ:
if [ <conditon> ]
then <do something>
fi
ほとんどの最新のシェルはthen
実際にはまったく必要とせず、状況をより良くするために存在しますが、それを必要とするいくつかのシェルがあるため、通常はそのままにしておきます。これはプログラムの実行方法にはまったく影響を与えず、シェルスクリプトを使用するほとんどの人が使用するスタイルルールにすぎません(したがって、2番目の形式を使用すると奇妙な外観があり、ほとんどの場合、サンプルコードで見ることができます)あります。最初に参照)フォーム)。