Linux で nohup を使用している際に、リダイレクトされたファイルが空の場合はどう対処すればよいですか。
Linuxでnohupコマンドを使用して出力をファイルにリダイレクトした場合、ファイルが空のままである可能性がある原因と対処法がいくつか考えられます。
- 命令が何の出力も生成していない場合:コマンドが正常に実行され、出力が生成されているかを確認してください。コマンドを直接ターミナルで実行し、出力があるかどうかを確認してください。コマンドに出力がない場合、リダイレクトされたファイルは空になります。解決策は、コマンドが出力を生成できるようにすることです。
- ファイルのパーミッションの問題:指定された出力ファイルが書き込み操作を許可する適切な権限を持っているかどうかを確認してください。ファイルの権限を確認するには、ls -lコマンドを使用し、権限を変更するにはchmodコマンドを使用してください。
- ファイルパスの問題:出力ファイルのパスが正しいかどうかを確認してください。ファイルパスが絶対パスまたは現在の作業ディレクトリに対する適切な相対パスであることを確認してください。
- 標準エラー出力を使用する:通常、リダイレクト演算子(>)は標準出力(stdout)をリダイレクトしますが、標準エラー出力(stderr)はリダイレクトされません。コマンドの出力が標準エラー出力を介して行われている場合、リダイレクトされたファイルは空になります。以下のコマンドを使用して標準エラー出力もファイルにリダイレクトできます:
- nohupコマンド > output.txt 2>&1
- 命令の出力はバッファリングされます:一部のコマンドは、出力をバッファリングし、バッファがいっぱいになるか特定の条件が満たされるまで、ファイルにフラッシュされません。出力バッファリングを無効にするために、stdbufやunbufferコマンドを試してみることができます。例えば:
- nohupコマンドを使用して、stdbuf -oLコマンドを実行し、output.txtに出力します。
- もしくは
- nohupコマンドを使って、unbufferを実行し、output.txtに結果を保存します。
上記の可能性のある原因を調査し、1つずつ問題を解決することで、Linuxのnohupでリダイレクトされたファイルが空である問題を解決できるはずです。