/var/log
FreeBSDのcronを通して、ログファイルは定期的にディスクに同期されるtmpfsとしてマウントされました。このプロセスはスクリプトによって実行されますrc
。
私は次のようにインストールしました。
mount -t tmpfs -o nosuid,noexec,mode=0755,size=100M log /var/log
今、問題は削除することです。(r)syslog
ファイルが作成されたため削除できません。 lsof は以下を示しています。
lsof /var/log/
lsof: WARNING: compiled for FreeBSD release 11.1-RELEASE-p6; this is 11.1-RELEASE.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 85515 root 2w VREG 255,2264924190 210 13 /var/log/security
rsyslogd 85515 root 4w VREG 255,2264924190 210 3 /var/log/auth.log
rsyslogd 85515 root 5w VREG 255,2264924190 2292 7 /var/log/kern.notice
rsyslogd 85515 root 6w VREG 255,2264924190 2292 11 /var/log/messages
rsyslogd 85515 root 7w VREG 255,2264924190 2292 5 /var/log/debug.log
したがって、それを削除するには、まずsyslogデーモンを停止する必要があります。しかし、これはsh rcスクリプト自体で管理されるため、より良いソリューションを探しています。
Linux / GNU Osにはumount
非常に便利な主張があります。--lazy detach the filesystem now, clean up things later
、私が理解したように、アクティブプロセスがファイルシステムへの読み書きを停止するのを待ちます。それから削除プロセスを実行すると成功し、スクリプトは中断されません。
それでは、この問題の回避策としてsyslogが一時的に/ var / logに書き込まれないようにするにはどうすればよいですか?STOP
をエクスポートして削除し、シグナルを送信しようとしましたが、CONT
役に立ちません。
Lsofは依然としてFDへの書き込みが可能であると報告しています。スクリプトに適用できるソリューションが必要であることに注意してくださいsh
。
ありがとうございます!
編集する
umountには--force
パラメータがありますが、一般的な状況では、どんな犠牲を払ってもこれを避けます。しかし、これは1つであり、tmpfs
ブロックデバイスではなくメモリ上で実行されるので、何の害もないと確信しています。
複数のテストで何の問題もないことがわかりました。私はtmpfsにダミーファイルを作成し、その合計を確認し、ハードドライブと同期し、強制的にアンマウントすることでdd
これを行いました。ハッシュが一致します。これは、ファイルが破損していないことを意味します。
まあ、それは少し汚れた解決策ですが、他の解決策はわかりません。 RAM fsでこのアプローチにいくつかの欠点がある人がいる場合は、教えてください。
ps:提案してくれた@layer8problemに感謝します:-)