5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(bash) while 文に nohup を使う

Posted at

はじめに、curl コマンドでレスポンスタイムを取得しようとした。

$ TARGET_URL=https://www.google.com/
$ curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n"
0.308898

問題なく動作した。
次にそれを3秒間隔で実行しようと while を使った。

$ while true; do curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n"; sleep 3s; done
0.370663
0.374432
0.929187

これも問題なく動作した。
次に出力を output.log にリダイレクトしようとした。

$ while true; do curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n" >> output.log; sleep 3s; done
$ tail -f output.log 
0.361946
0.413211
0.952241

問題なくリダイレクトされている。
次に nohup をつけてログアウト後も処理を継続しようとした。

$ nohup while true; do curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n" >> output.log; sleep 3s; done &
bash: syntax error near unexpected token `do'

これはエラーになって動作しない。
別の bash プロセス上で起動する必要がある。

$ nohup bash -c 'while true; do curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n" >> output.log; sleep 3s; done' &
$ tail -f nohup.out 
curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information

しかしながら、no URL specified と言われてしまう。
別の bash プロセス上で起動しているため、元のシェル変数${TARGET_URL} が見えなくなってしまっている。
そこで環境変数として定義しなおしてみる。

$ export TARGET_URL=https://www.google.com
$ nohup bash -c 'while true; do curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n" >> output.log; sleep 3s; done' &
$ tail -f output.log 
0.361946
0.413211
0.952241

問題なく出力することができる。
もし、環境変数として定義したくない場合は、実行するコマンドの最初にシェル変数を定義してあげる。

$ nohup bash -c 'TARGET_URL=https://www.google.com/; while true; do curl ${TARGET_URL} -s -o /dev/null -w  "%{time_starttransfer}\n" >> output.log; sleep 3s; done' &
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?