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