Belirli bir işlem için .pid dosyası nasıl bulunur


15

Ben monit kuruyorum ve belirli bir python uygulamasını izlemek istiyorum. Monit bunu işlemler için .pid dosyalarına bakarak yapar, ama bunun nerede olacağını bilmiyorum.

Ben de kendi basit yürütülebilir dosyası oluşturmayı ve çalıştırmayı denedim - burada da .pid dosyasının nerede oluşturulduğunu anlayamıyorum.

Ve tüm süreçlerin .pid dosyası var mı?


6
Tüm işlemlerin bir .piddosyası yoktur. Uygulamanın (veya başlangıç ​​betiğinin) açıkça bir tane oluşturması gerekir.
Bahama

Yanıtlar:


14

Daemonized işlemlerin PID dosyalarını genellikle /var/run/Redhat / CentOS tarzı sistemlerde bulabilirsiniz.

Kısacası, işlem başlatma komut dosyasına her zaman bakabilirsiniz. Örneğin, SSH arka plan programı komut dosyasında ile başlatılır /etc/init.d/sshd. Bazen PID orada tanımlanır (pid, PID, PIDFILE, PID_FILE vb. İçin arama yapın).

Bununla birlikte, RHEL tarzı sistemlerde diğer pek çok cin, /etc/init.d/functionskomut dosyasını bazı ortak özellikler için kaynak yapar .

# Set $pid to pids from /var/run* for {program}.  $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
        local base=${1##*/}
        local pid_file=${2:-/var/run/$base.pid}

Kaynak yapan her şey için /etc/init.d/functions, PID yaşayacaktır /var/run/*.pid.

Özel uygulamalar için PID, bir sarmalayıcı komut dosyasında tanımlanacaktır (umarım). Yine de tanıdığım çoğu geliştirici, yukarıdaki cinlerle aynı sözleşmeyi izliyor.

Eğer varsa yapmak bir PID dosyası olmadan karşılaşma şey hatırlamak Monit yanı bir süreç dize patern üzerinde izleyebilirsiniz .


1
ewwhite- Çok teşekkürler- ama monit procmatch anythingkomut satırında denediğimde monit: invalid argument -- procmatch. Herhangi bir fikir?
Yarin

Monit'in hangi sürümünü kullanıyorsunuz? (Tip monit -V) Hangi işletim sistemi / dağıtım?
ewwhite

Monit 5.1.1 CentOS 6
Yarin

Ayrıca, çok sayıda arka plan programı olmayan süreç için seçeneklerim ne olurdu? Bu cevap
Yarin

@yarin Görünüşe göre EPEL deposundan Monit var . Dan EL6 sürüm RPMForge 5.4 olduğunu.
ewwhite

1

Aldığım başka bir yaklaşım:

Katıştırılmış modda çalışan bir veritabanı sunucum var ve veriler içeren uygulamanın dizini içindedir.

Veritabanı .pid dosyası gibi bir şeye sahiptir, ancak dosyayı kilit dosyası olarak adlandırır. Bu kilit dosyasını bulmak için, uygulama tarafından açık tutulan tüm dosyaları listeledim:

$ ls -l /proc/18264/fd | cut -d'>' -f2

Bu soketler, borular, sunucu dosyaları vb. Dahil olmak üzere uzun bir liste verdi. Birkaç filtre ve ihtiyacım olan şey var:

$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan

/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.