タスクがシェルやそのシャットダウンから独立するように、バックグラウンドでスクリプトをダウンロードして実行したいと思います。また、スクリプトは次のように実行する必要がありますsudo
。
echo MY_PWD | sudo -u MY_USER -S ...
したがって、認証を実行して複数行のバックグラウンドタスクを作成するSSHセッションに1行のコードを追加するだけです。また、実行の成功または失敗後にインストールスクリプトを削除する必要があります。NEW_SCRIPT_NAME.sh コード行は次のとおりです。
wget https://URL_TO_SCRIPT.sh -O NEW_SCRIPT_NAME.sh
sed -i 's/\\r$//' NEW_SCRIPT_NAME.sh
chmod +x NEW_SCRIPT_NAME.sh
sudo nohup NEW_SCRIPT_NAME.sh &
rm NEW_SCRIPT_NAME.sh
私はこれを試みます:
echo raspberry | sudo -u pi -S wget https://URL_TO_SCRIPT.sh -O NEW_SCRIPT_NAME.sh && sed -i 's/\\r$//' NEW_SCRIPT_NAME.sh && chmod +x NEW_SCRIPT_NAME.sh && nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh
これにより、次のエラーが発生します。
-bash: syntax error near unexpected token `&&'
削除すると解決可能&linenohup
ですが、これはスクリプトがバックグラウンドではなく前景で実行されますが、これは私の目的に必要です。
答え1
これはBashの無効な構文です。
nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh
~から住宅検査:
Line 1:
nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh
^-- SC1070: Parsing stopped here. Mismatched keywords or invalid parentheses?
something & && something
最初のコマンドをバックグラウンドに入れると、スクリプトがコードを返すのを待つことができないため、単に実行することはできません。
バックグラウンドのnohupで完全なパイプラインを実行できます(可能なスクリプト)。
nohup ./run.sh &
または、1つのコマンドにすべてを含めるには、結果を待つ必要があります。
nohup ./NEW_SCRIPT_NAME.sh & wait && rm NEW_SCRIPT_NAME.sh
削除する前にスクリプトが完了するのを待ちます。