pidof
não oferece uma maneira de especificar /path/to/script
para corresponder aos comandos do formulário interpretername /path/to/script
. Ele sempre olha para o nome do arquivo do executável listado no arquivo /proc/pid/stat
.
Mas funcionará se o seu script começar com shebang #!
e se você invocar o script com /path/to/script
.
Como alternativa, a maioria dos sistemas GNU / Linux oferece um comando pgrep
, que pode corresponder a toda ou parte de uma linha de comando. No seu exemplo, você pode usar
pgrep -x -f 'python /some/dir/script.py -v'
Isto irá corresponder à linha de comando exata. Se você quiser combinar uma linha de comando parcial, você pode fazer algo como
pgrep -x -f 'python /some/dir/script.py .*'
Você pode omitir o -x
para colocar um .*
implícito no início e no final do padrão, mas isso também corresponderá ao seu processo su - user -c python /some/dir/script.py -v
.
Como você mencionou nos comentários, a melhor maneira de garantir que seu comando não execute várias instâncias ao mesmo tempo é usar o bloqueio de arquivo, como fcntl.flock .