以下を使用してフォルダを削除するスクリプトがあります。
ssh -q root@hostname sh -c 'rm -rf /opt/jetty/'
ほとんどの場合はうまく機能しますが、時々次のメッセージが表示されます。
rm: `/opt/jetty' を削除できません。ディレクトリが空ではありません。
唯一の疑いは、削除するフォルダにflock
ファイルロックを取得するためにシェルコマンドで使用されるロックファイルが含まれていることです。しかし、ファイルがロックされている間にフォルダを手動で削除しようとしましたが、うまくいきflock
ました。
修正する:
環境はLinuxです
# uname -a
Linux XXX 2.6.32-504.8.1.el6.x86_64 #1 SMP Fri Dec 19 12:09:25 EST 2014 x86_64 x86_64 x86_64 GNU/Linux
rmはエイリアスを指定せず、rmの出力は次のようになります。
# rm
rm: missing operand
Try `rm --help' for more information.
Jettyを起動し、フォルダ内にファイルロックを生成するサービススクリプトがあります。一部のスニペットは次のとおりです。
JETTY_LOCK=/opt/jetty/jetty_lock
start(){
#open file descriptor and acquire lock
exec 200>$JETTY_LOCK
flock -x -n 200 || { exec 200>&-;echo 'jetty is being started by another process.'; sleep 5; exit 0; }
...
cd /opt/jetty/
...
echo $!>&200
fi
flock -u 200 #release lock
exec 200>&- #close file descriptor
}
修正する:
エラーが再び表示された後、int /opt/jettyにjetty_lockファイルのみが残っていることがわかりました。これは、flock
ファイルロックが削除されないことを意味しますか?次はいつになるのかわからないので、詳しくは申し上げません。
答え1
SSHセッションをデバッグするには、「-q」の代わりに「-v」オプションを使用して出力を分析します。
リモートコマンドに絶対パスを使用してみてください。だからこれは次のようになります:
# ssh -v root@hostname/bin/sh -c '/bin/rm -rf /opt/jetty/'