Bashでスケジュールされたバックグラウンドジョブの実行

Bashでスケジュールされたバックグラウンドジョブの実行

30秒ごとにbashでコマンドを実行し、バックグラウンドジョブとして実行したいと思います。形この投稿、watchコマンドを使用すると便利です。ところで、背景に設定しようとするたびに停止します。

watch -n 1 'date >> dateFile.txt'

働くcat dateFilet.txt行がたくさん見えますね。

watch -n 1 'date >> dateFile.txt' &

返品

[1]+ Stopped watch -n 1 'date >> dateFile.txt'

実行すると、bg同じ行が再び返されます。

私は何が間違っていましたか?どうすれば解決できますか?私が最終的に望むのは、bashセッション内で特定の変数を最新の状態に保つために1分ごとにファイルを取得することです。

答え1

Bashでは、次のコマンドを使用して簡単にこれを実行できます。PROMPT_COMMAND変数( man bash):

プロンプトコマンド

設定されている場合、この値は各デフォルトプロンプトが実行される前にコマンドとして実行されます。

したがって、次のようなものを追加すると~/.bashrc

PROMPT_COMMAND=". /path/to/file"

このファイルで定義されているすべての変数を使用できます。

答え2

あなたのcrontab

* * * * * date >> dateFile.txt & sleep 30; date >> dateFile.txt &

かなり簡単ではありませんか? =)

(コマンドのフルパスを入力するのが最善ですdate。)

別の解決策:

while true; do date >> dateFile.txt & sleep 30; done

答え3

私が最終的に望むのは、bashセッション内で特定の変数を最新の状態に保つために1分ごとにファイルを取得することです。

  • あなたできない子プロセス内でこれを行います。
  • あなたできない親プロセスでこれを行います。
  • あなたできない影響を及ぼしたいプロセス以外のプロセスでこれを行います。

プロセスの環境を変更することは、プロセスのプライベートメモリを変更することと同じです(実際、これはすぐに関連しています)。絶対に許可されていません!だからこそ産業用コンピュータ本当に絶妙なエリアです。

関連情報