2012-02-05 12 views
6

Bir Django web sunucusunu başlatan bir Makefile sahibim. Sunucunun bir dosyaya kaydedilen PID ile arka planda başlatılmasını isterim.Makefile tarafından başlatılan bir arka plan işleminin PID'inin yakalanması

run: venv 
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid" 

Bu işe yaramazsa:

Benim tarifi aşağıdaki gibidir: arka plana,

run: venv 
    @"${PYTHON}" "${APP}/manage.py" runserver 80 

Sezgisel süreci ve PID yakalamak, ben böyle bir şey yapmak zorunda kalacak olsa da. alt kabuk kullanımları (benim durumumda/bin/sh) kullandığınızda çalışır 'yapmak':

<command> & 

... arka plana bir süreç ve çalışır zaman kullanım:

<command> ; <command> 

(veya <command> && <command>, vb.) zincir komutlarına.

/bin/sh: -c: line 0: syntax error near unexpected token `;'

arka en iyi yolu bir süreç nedir ve Makefiledaki PID yakalamak: Ben ikinci bir arka plana birinci sürecini denemek ve zincir Ancak, aşağıdaki hatayı alıyorum?

Teşekkür
- Oda

+0

ben sen neden merak ediyorum web sunucusu başlatmak için 'make' kullanma? Bu bir çeşit test takımı mı? İyi şanslar! – shellter

+0

@shelter: Bir web uygulamasında çalışıyorum ve geliştirme ve test amacıyla yerel bir web sunucusunu başlatmanın hızlı bir yolunu sağlamak için Makefile kullanıyorum. – BillyBBone

cevap

17

Sadece bunun ardından noktalı virgül olmadan, tek bir işareti bırakın:

run: venv 
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & echo "$$!" > "${LOGDIR}/django.pid" 

Ve işareti noktalı virgül ile aynı şekilde komut ayırıcı olarak davranır:

<command> & <command> 
+0

Her gün yeni bir şeyler öğreniyorum! Teşekkürler! ;) – BillyBBone

+0

@Billy, aslında bende. :) –

0

yap seni çok dert olursa, her zaman hedef olarak başlatabilir, sh komut dosyası olabilir; Bu komut dosyasında, işlemi, arkaplanı başlatın ve pid dosyasını bir dosyaya verin.

+0

Bu işe yarayabilir, ancak bir makefile yalnızca bir set kabuk makro komutu olduğundan, muhtemelen kabuk komut dosyamda aynı soruna rastlardım. Buradaki çözüm, başka bir soyutlama ve bağımlılık katmanı eklemek yerine doğrudan makefile uyarlanmalıdır. – BillyBBone

+0

Doğru. Bir çok kez, önce bir kabuk senaryosunda çalışmayı ve sonra Makefile'ye taşımaya çalışırım. –