私は、特定の条件下で、ジャンクファイルのギグをログディレクトリにダンプするベンダーのプログラムを修正する任務を負っています。最終的にはユーザーのマシンがいっぱいになります。私の仕事は、それを停止させる方法を理解することですソースコードや追加の実行中のプロセスなしで、そしてプログラムをkasplodeにすることなく。言い換えれば、私はファイルシステムの機能を使用して成長を制御しようとしています。
私が持っていたアイデアの1つは、Linuxの世界で/dev/null
を使用する場合と同様に、そのフォルダーからNULにハードリンクを作成することでした。ただし、mklink
プログラムを使用してジャンクションを作成しようとすると、Local volumes are required to complete the operation.
というメッセージが表示されます。
ジャンクションを完成させる方法に関するアイデア、または問題を解決するための他のアイデアはありますか?
いいえ。ハードリンクはNTFS内でのみ使用可能であり、NULファイルはNTFSファイルではありません。これは\。\ Devices\NULL名前空間オブジェクトのWIN32名ですが、ハードリンクを作成することはできません。
必要に応じて、NULファイルへのソフトリンク(ショートカット)を作成することもできますが、それがなぜ良いアイデアになるのか、私にはよくわかりません。
私はここでボールのアイデアを吐き出しているだけですが:
問題のあるプログラムにコマンドラインスイッチがある場合は、オフにすることができます。できることとできないことを前提として、最初にベンダーに質問します。
ベンダープログラムがWindowsが読み取るある種のシステムイベントを作成する場合は、ジャンクフォルダー(バッチ、cmd、またはPowerShell)を削除するスクリプトを作成できる可能性があります。これが可能な場合は、ベンダープログラムのダンプが完了するまで待つことを忘れないでください。
最後の手段は、Windowsのログオフ時に削除するスケジュールされたタスクを設定することです。これには、クライアントマシンに、セッション中にジャンクが存続するのに十分なスペースが必要です。
クライアントがサーバーであり、ログオフがない場合は、たとえば24時間ごと、またはこれが発生する頻度を2で割って実行するように設定します。2で割ると、いわば二重ジャンクの可能性が低くなります。
ドライブ文字のルートにログファイルを書き込むようにプログラムを説得できる場合は、たとえばT :、試してみてください
subst T: NUL:
その後、ビットバケットへのリダイレクトが機能するためです。たとえば、次のように機能します。
echo > T:\some_file
しない動作するのは、偽のTからの読み取り、ドライブ、フォルダーの作成、およびファイルの読み取りアクセスです。どのソートが理にかなっていますが、おそらくあなたのアプリはそれらに依存しています。
問題のあるログファイルが不要で、パス/名前が既知の変数である場合は、root /特権ユーザーとして読み取り専用ファイルとして作成して、作成されないようにしてください。
または、シンボリックリンク先の制限されたサイズの読み取り専用ボリューム/パーティションまたはRAMディスクを作成して、ファイルのサイズを制限することもできます。
プログラムが操作を続行するためにログファイルを必要とし、書き込みができないときに「kasplodes」を必要とする場合、nullにパイプできなかった場合は、ログローテーションなどのプログラムによる解決策が必要になることがあります。
別のWindowsユーザーを作成してプログラムを実行し(パスワードで保護されたアカウントである必要があります)、ログが書き込まれるドライブを右クリックしてプロパティを選択できます。次に、[クォータ]タブをクリックして、そのユーザーのディスク容量クォータを設定します。最後に、Shiftキーを押しながら、プログラムを起動する.exeファイルを右クリックし、[別のユーザーとして実行]を選択して、作成したアカウントを選択します。
問題のあるディレクトリに定期的に(またはプログラムの使用の開始/終了時に)書き込まれる.logファイルを削除するスクリプトを作成しないのはなぜですか?確かに、それはあなたが会社に彼らのプログラムを修正させることができるまでのバンドエイドです。
といった:
do {}
While (Get-ChildItem C:\problemfile).Count = 0)
Remove-Item "c:\problemfile\*.log"
Write-Host “Program log file cleaned successfully”
私はPoSHを初めて使用するため、このスクリプトは機能しない可能性がありますが、コンセプトは適切だと思います。