
次の問題: ファイルをコピーするために Windows ネットワーク共有をマウントする必要があるサーバーがあります。そのため、fstab
起動時にマウントされるように共有を追加しました。
//192.168.1.xx/share /mnt/networkshare cifs noperm,username=user,password=****** 0 0
スクリプトはループして、次のように共有上のファイルをコピーします。
while [ true ]
do
if [ -f /path/to/the/file ]
then
mv /path/to/the/file /mnt/networkshare
fi
done
問題は、Windows コンピューターが夜間にシャットダウンし、朝に起動することです。まず、この間、while [true] スクリプトにより、サーバーの負荷は 1 つのコアで 100% になります。次に、Windows コンピューターの起動後にマウントが機能しなくなることがあります (crontab を実行し* * * * * mount -a
てすべてを再度マウントします)。ファイルはコピーされず、サーバー上でマウントにアクセスできません。再起動する必要があります。
コンピュータがオンになっている間、マウントが常に存在するようにするにはどうすればよいでしょうか。共有を何らかの方法でアンマウントする必要があるのでしょうか。毎晩アンマウントすることはできますが、日中に Windows コンピュータが再起動された場合はどうなりますか。夜間に CPU 負荷を下げるためにマウントが存在しない場合、while [true] スクリプトを一時停止するにはどうすればよいでしょうか。
ご協力いただきありがとうございます!
答え1
移動を試みる前にマウントを確認できます:
df | grep "/mnt/networkshare" |grep -v grep >/dev/null; r=${?}
if [ ${r} -eq 0 ]
then
mv /path/to/the/file /mnt/networkshare
fi
また、sleep
プロセスにコマンドを追加すると、CPU 使用率が 100% になる問題が軽減される可能性があります。プロセスを中断せずに集中的に実行するのは良い方法ではありません。