バックグラウンドで実行し続けたいスクリプトがありますが、どこで起動するのかわかりません。
これを に入れると.bashrc
複数回実行されます (ログインするたびに 1 回ずつ)。
これは、ユーザーがログインしている間に実行したいがユーザーごとに何度も実行したくない無限ループです。
ベストアンサー1
スクリプトはインスタンスが1つしかないことを確認する必要があります。次のようにしてみてください。
#!/bin/bash
mkdir ~/.lock_script || exit
trap "rmdir ~/.lock_script" EXIT
while true
do
# Do whatever the script does continuously, here....
#
done
このtrap
コマンドは終了時にクリーンアップを担当するため、スクリプトが終了または終了してもクリーンアップされます。どのプロセスもTERM信号(信号9)をトラップ(キャッチ)できないため、kill -9
スクリプトを実行するとそれ自体がクリーンアップされません。
カーネルに関する限り、mkdirはアトミックアクションです。 mkdirが成功しなかった場合(ディレクトリがすでに存在する場合)、コマンドはエラーを返し、それによってコマンドの後半が実行されます(例:終了)。
コマンドを「mkdir or else exit」として読み込むことができます。ここでより良い説明があります。http://initialprogramload.blogspot.com/2008/11/single-script-instance.html
また、この方法は使用しないことをお勧めします。while true
可能であれば、目的のタスクを実行する別の方法を見つけてください。