pidof
スクリプトがまだ実行されていない場合は、この実行可能ファイルが必要なため、コマンドを使用してスクリプトがすでに実行されていることを確認しようとしましたが、コマンドが返されないpidof
ようです。PID出力に表示される名前を使用するスクリプトの名前ps -ef
。代わりに名前を/usr/bin/python
またはでマスクします/bin/su
。誰かが何が起こっているのか、そしてpidof 'script.py -v'
スクリプトが実行されていることを確認するためにどのように実行できるのかを教えてください。
[root@cloud proc]# pidof python /some/dir/script.py -v
> pidof: invalid options on command line!
[root@cloud proc]# pidof "python /some/dir/script.py -v"
>
[root@cloud proc]# pidof "su - user -c python /some/dir/script.py -v"
>
[root@cloud proc]# ps -ef | grep script.py
> root 5409 31739 0 13:07 pts/1 00:00:00 su - user -c python /some/dir/script.py -v
> user 5414 5409 96 13:07 ? 01:00:40 python /some/dir/script.py -v
[root@cloud proc]# ls -l /proc/5409/exe
> lrwxrwxrwx. 1 root root 0 Oct 13 14:04 /proc/5409/exe -> /bin/su
[root@cloud proc]# ls -l /proc/5414/exe
> lrwxrwxrwx. 1 user user 0 Oct 13 14:04 /proc/5414/exe -> /usr/bin/python
[root@cloud proc]# pidof /bin/su
> 31715 6308 5409
[root@cloud proc]# pidof /usr/bin/python
> 5414
答え1
pidof
/path/to/script
コマンドに一致する形式を指定する方法はありませんinterpretername /path/to/script
。いつも見える実行ファイルのファイル名ファイルにリストされています/proc/pid/stat
。
ただし、スクリプトが次に終わる場合シェルボーン #!
呼び出しスクリプトを使用している場合/path/to/script
。
あるいは、ほとんどのGNU / Linuxシステムは、pgrep
コマンドラインの全部または一部に一致するコマンドを提供します。あなたの例では、
pgrep -x -f 'python /some/dir/script.py -v'
これは正確なコマンドラインと一致します。コマンドラインの一部を一致させるには、次のようにします。
pgrep -x -f 'python /some/dir/script.py .*'
パターンの始まりと終わりに暗黙的な位置を省略することができますが、-x
これも手順と一致します。.*
su - user -c python /some/dir/script.py -v
あなたのコメントで述べたように、複数のコマンドインスタンスが同時に実行されないようにするより良い方法は、ファイルロックを使用することです。fcntl.flock。