Neden komut dosyasını doğrudan çağırmak yerine süpervizörde `bash -c'yi kullanmalısınız?


11

supervisordSunucumdaki hizmetleri kontrol etmek için kullanmaya başlıyorum . Ben linux profesyonel bir kullanıcı değilim ama oldukça iyi alabilir ve çalıştırabilirsiniz.

Sadece meraktan, süpervizördeki çoğu komutun şöyle adlandırıldığını fark ettim:

[program:install]
command=bash -c "/src/etc/install.sh"

Ben bash adam okudum -cve dize sonra geçirilen değişkenleri eklemek için kullanılması gerektiğini biliyorum .

Peki bash -c, senaryoyu doğrudan çağırmak yerine (aşağıdaki örnek gibi) süpervizörde (veya başka bir yerde) kullanmanın anlamı nedir?

[program:install]
command=/src/etc/install.sh

Teşekkürler!

Yanıtlar:


11

Kabuk dosyayolu (gibi özellikler *, ?), komut listeleri ( ;, &&, ||(), yönlendirme <, >, |,) yalnızca argüman dizeleri bir diziye komutu böler o supervisord tarafından uygulanmadı.

Bu bash -csadece komutta bu tür özellikleri kullanmaya cazip olabilecek acemi kullanıcılar için bir yardım olabilir. Örneğin,

command=echo foo > /tmp/bar

çıkışlar foo > /tmp/baryerine yazma fooiçin /tmp/bar.

-cdeğişkenlerle pek ilgisi yoktur. Bash tüm ek argümanlar sadece komut bağımsız değişkenleri olarak kullanılabilir olacaktır $0, $1komuta vb, ama bu özellik nadiren herhangi kullanımı vardır. Örneğin bash -c 'echo $0 $0' fooçıktılar foo foo.


1
Teşekkürler, bu çok pragmatik bir cevaptı ve bu muhtemelen beni çok zaman kazandıracak. Acemi bir kullanıcı olarak bu hatayı yapardım (ve asla bash -cbir çözüm olarak düşünmem !).
Daniel Costa

6

Belgelerde açıklanmıştır :

Alt işlem çalıştırdığında denetimci tarafından kabuk çalıştırılmaz, bu nedenle USER, PATH, HOME, SHELL, LOGNAME vb. Ortam değişkenleri varsayılan değerlerinden değiştirilmez veya yeniden atanmaz. Bu, konfigürasyondaki bir user = stanza ile root olarak çalıştırılan bir denetim otoritesinden bir program çalıştırdığınızda dikkat etmeniz özellikle önemlidir.

Bu sorunu bash -caşmak için kullanılabilir.


2
Mark, cevabın için teşekkürler ama diğerinin daha makul bir senaryo olduğunu düşünüyorum (seninki benim için yanlış olmasa da, hala bir doğru cevap seçmem gerekiyor.). Bunun yanı sıra, yeni kullanıcıya daha az puanla yardım ediyorum.
Daniel Costa
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.