
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.