Linux・UNIXでコマンドを定期的(数秒ごとなど)に連続実行させる方法

Linuxで、コマンドを定期的に、それもcronを利用するほどでもない間隔(数秒、数分など)で実行させるには、どうすればいいのだろうか?

1.watchコマンドを利用する

フロント側でコマンドを連続実行させるならば、watchコマンドを利用すればいい。

watch -n 間隔(秒) コマンド

例えば、1秒ごとに「ls -la」を実行する場合、以下のようにすれば良い。

watch -n 1 ls -la

ただし、watchコマンドはバックグラウンドでの実行が出来ない。
そのため、バックグラウンドでの実行をする場合は、次のwhileの方法を取るといいだろう。

2.whileを利用する

さて、watchコマンドはバックグラウンドでのコマンド実行は行えない。
そのため、バックグラウンドで連続でコマンドを実行する場合は、whileで以下のようにコマンドを実行すると良いだろう。

while true; do 実行するコマンド; sleep 間隔(秒); done &

なお、実行コマンドの部分で標準出力が行われる場合だと、バックグラウンドでの実行にならずコンソール上に定期的に出力されてうざったいことになる。
その場合は、以下のようにする。

while true; do 実行するコマンド > /dev/null; sleep 間隔(秒); done &

これで、バックグラウンドで定期的にコマンドを実行するようになる。


2016/11/20 追記

その他の手法としては、以下のようにyesコマンドで実行させるコマンドの文字列を生成させ、それをshにパイプで渡すといった方法がある。
(【参考】: 第25回シェル芸勉強会に参加してきました(復習))

yes 'コマンド;sleep 1' | sh