filenameにtimestampを付ける

shellでファイル名にタイムスタンプを付ける

test_$(date +%Y%m%d_%H%M%S).log

指定ユーザーでシェルを実行しログを出力する

nohup su - user1 -c "/tmp/test.sh &>/tmp/test_$(date +%Y%m%d_%H%M%S).log" &

nohupは、terminalが閉じられても実行し続ける。

&>は、stdout, stderrともにファイルに出力する。

最後の&は、バックグラウンドで実行する。

nohupの使い方

nohup /tmp/test1.sh &>/tmp/test1.log &

標準出力に表示される内容はカレントディレクトリに nohup.out というファイル名で記録されるが、&>でファイルにリダイレクトするとstdout, stderrがファイルに出力される。

nohupを付けてコマンドを実行するとterminalが閉じられてもkillされることなく実行され続ける。

以下のtest1.shで動作を確認する。

# cat test1.sh
#!/bin/bash
sleep 10
echo "std1" >&1
echo "std2" >&2
exit

stdout, stderr両方をリダイレクトする(&>)

# nohup /tmp/test1.sh &>/tmp/12.log &

# cat 12.log
nohup: 入力を無視します
std1
std2

リダイレクトしない

#  nohup /tmp/test1.sh &

# nohup: 入力を無視し、出力を 'nohup.out' に追記します[1]+  終了                  nohup /tmp/test1.sh
# cat nohup.out
std1
std2

stdout, stderrを別々のファイルにリダイレクトする(1>stdout_log  2>stderr_log)

#  nohup /tmp/test1.sh 1>1.log 2>2.log &

# cat 1.log
std1
# cat 2.log
nohup: 入力を無視します
std2

どこにもログを出力しない(&>/dev/null)

# nohup /tmp/test1.sh &>/dev/null &

コメント

人気の投稿