サーバー上でのコマンド実行とログ管理
みなさん、サーバー上でバックグラウンドで実行するコマンドのログ管理や、何日の何時に何のコマンドを打ったかのログを取るのに困っていませんか?
例えば、長時間実行される解析ツールやバイオインフォマティクスツールを実行する場合、その実行状況を確認したり、エラーログを後で確認する必要があることがあります。そんなときに便利なのが、nohupコマンドを使ってコマンドをバックグラウンドで実行し、ログを自動的に保存する方法です。
実行スクリプトの説明
以下に示すシェルスクリプトは、指定されたコマンドをバックグラウンドで実行し、そのログをタイムスタンプ付きのファイルに保存する方法です。このスクリプトを使うことで、コマンドの実行結果やエラーメッセージを後で確認することができます。
シェルスクリプトの内容
nohup sh -c "
LOG_FILE="/path/to/log/\$(date '+%Y%m%d_%H%M%S')_${TAG}.txt"
echo "Executed command: ${CMD}" > \$LOG_FILE
${CMD} >> \$LOG_FILE 2>&1
" &
使用方法の説明
このスクリプトを使用するには、環境変数CMD
とTAG
を設定してから実行します。また、事前にログディレクトリを作成しておく必要があります。以下に例を示します:
-
ログディレクトリの作成
mkdir -p /path/to/log
mkdir -p
コマンドを使用して、ログを保存するディレクトリを作成します。/path/to/log
はログファイルを保存するディレクトリのパスです。 -
環境変数の設定とスクリプトの実行
export CMD="ここにコマンドを入力" export TAG="コマンドの説明やタグ" nohup sh -c " LOG_FILE="/path/to/log/\$(date '+%Y%m%d_%H%M%S')_${TAG}.txt" echo "Executed command: ${CMD}" > \$LOG_FILE ${CMD} >> \$LOG_FILE 2>&1 " &
-
CMD
変数に実行したいコマンドを入力します。
例:export CMD="python my_script.py"
-
TAG
変数には、コマンドの説明やタグを入力します。
例:export TAG="python_script_execution"
-
使用例
Pythonスクリプトの実行例
export CMD="python my_script.py"
export TAG="python_script_execution"
nohup sh -c "
LOG_FILE="/path/to/log/\$(date '+%Y%m%d_%H%M%S')_${TAG}.txt"
echo "Executed command: ${CMD}" > \$LOG_FILE
${CMD} >> \$LOG_FILE 2>&1
" &
この例では、Pythonスクリプトmy_script.py
をバックグラウンドで実行し、その出力とエラーメッセージを/path/to/log/
ディレクトリ内のタイムスタンプ付きログファイルに記録します。
生成されるログファイルの例:
/path/to/log/20240523_153045_python_script_execution.txt
BUSCOコマンドの実行例
バイオインフォマティクスツールであるBUSCOを使用する場合も同様に、このスクリプトを使用して実行結果を記録することができます。
export CMD="busco -i input.fasta -o output_directory -l lineage_dataset -m genome"
export TAG="busco_run"
nohup sh -c "
LOG_FILE="/path/to/log/\$(date '+%Y%m%d_%H%M%S')_${TAG}.txt"
echo "Executed command: ${CMD}" > \$LOG_FILE
${CMD} >> \$LOG_FILE 2>&1
" &
この例では、BUSCOコマンドをバックグラウンドで実行し、その出力とエラーメッセージを/path/to/log/
ディレクトリ内のタイムスタンプ付きログファイルに記録します。
生成されるログファイルの例:
/path/to/log/20240523_153045_busco_run.txt
最新のログファイルを閲覧する方法
バックグラウンドで実行されるコマンドのログファイルは、タイムスタンプ付きで保存されるため、複数のログファイルが生成されることがあります。以下に、最新のログファイルを確認する方法をいくつか紹介します。
-
最新のログファイルをリスト表示
ls -lt /path/to/log/ | head -n 5
このコマンドは、ログディレクトリ内のファイルをタイムスタンプ順にソートし、最新の5つのファイルをリスト表示します。
-
最新のログファイルを表示
less "$(ls -t /path/to/log/ | head -n 1 | xargs -I {} echo /path/to/log/{})"
このコマンドは、最新のログファイルを表示します。
less
コマンドを使ってファイル内容をスクロールしながら確認できます。
ショートカットアプリへの登録
紹介したコマンドは、Macのショートカットアプリに登録して、メニューバーに常駐させておくと、ワンクリックで使用できるので便利です。以下のリンクからショートカットをダウンロードして使用してみてください。
nohupコマンドをクリップボードにコピー
nohup sh -c "
LOG_FILE="/path/to/log/\$(date '+%Y%m%d_%H%M%S')_${TAG}.txt"
echo "Executed command: ${CMD}" > \$LOG_FILE
${CMD} >> \$LOG_FILE 2>&1
" &
最新のログファイルをリスト表示
ls -lt ~/log/ | head -n 5
最新のログファイルを表示
less "$(ls -t ~/log/ | head -n 1 | xargs -I {} echo ~/log/{})"
まとめ
この方法により、シェルスクリプトの実行を自動化し、後で確認できるようにログを保存することができます。特に、長時間実行されるコマンドや、実行結果を後で確認する必要がある場合に便利です。また、ログファイルの管理と確認方法を習得することで、サーバー上での作業効率をさらに向上させることができます。ぜひ、このスクリプトと方法を活用して、サーバー上での作業をスムーズに進めてください。