プロセス名は /usr/bin/python と /bin/su によって「マスク」されます。

プロセス名は /usr/bin/python と /bin/su によって「マスク」されます。

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

関連情報