Linux では、psql と入力リダイレクト演算子を使用してファイルをデータベースにロードしています。ディスク容量を解放するためにファイルを削除したいと考えています。それは負荷に干渉しますか?
psql mydatabase < myfile.sql &
rm myfile.sql
Linux では、psql と入力リダイレクト演算子を使用してファイルをデータベースにロードしています。ディスク容量を解放するためにファイルを削除したいと考えています。それは負荷に干渉しますか?
psql mydatabase < myfile.sql &
rm myfile.sql
psql
が完了するまで、ファイルは実際にはディスクから削除されません。ディレクトリから削除されるため表示されませんが、ファイルは操作が完了するまでディスクに残ります (スペースを消費します)。
Linux(およびほとんどのUNIXバリアント)では、プロセスが現在開いているファイルを削除すると、OSがディレクトリエントリを削除しますが、ファイルを開いている最後のプロセスがファイルを閉じるまでファイル自体をディスクに保持するため、ファイルを使用するプロセス何事もなかったかのように楽しく仕事ができます。
したがって、(1)スクリプトは幸運な偶然によって機能し(シェルもリダイレクトを設定するまでファイルを削除しません)、(2)ファイルのpsql
使用が完了する前にファイルを削除しようとしても、ファイルがまだ完了するまでディスク容量を占有しpsql
ます。
おそらくあなたがしようとしていることは次のとおりです。
(psql mydatabase < myfile.sql && rm myfile.sql) &
このように、バックグラウンドでサブシェルが生成され、 psql コマンドが実行され、removeが返された後にmyfile.sql
実行されます。
これ&&
は、「左側を実行し、成功した場合にのみ (読み取り: 終了ステータス 0 を返す) 右側を実行する」という意味です。これは一般的なシェル イディオムです。