Web Server üzerinden komutlar Kabul Linux Servisi nasıl yapılır?

8 Cevap php

Benim web sunucusunda arka planda çalışan bir uygulama gerekir, ama ben root yetkileri ile uygulamayı durdurmak / başlatmak gerekiyor.

Bunu yapmak için, ben bu uygulamayı öldürebilir, böylece root ayrıcalıklarına sahip bir servis çalışan var ve ihtiyaç halinde yeniden başlatmak istiyorum.

Son olarak, ben dolaylı web üzerinden kontrol edilebilir, böylece Apache / PHP ile hizmete komutları başlangıç ​​göndermek ve öldürmek gerekiyor.

How do I create a Linux service?
How do I communicate with a Linux service in this manner?

Şimdiden teşekkürler!

8 Cevap

Kabuk dosyaları aramak için PHP komut exec komutunu kullanın. O (yerine web sunucunun izinleri ile çalışan) sahibi olarak çalışacak şekilde kabuk dosyaları "setuser" bit ile kurulum olabilir.

Vb test sürü, izlenmesi, - tabii ki, çok dikkatli olmak gerekir

Son olarak değil, root olarak, özel bir kullanıcı olarak hizmet çalışan düşünüyorum. Apache ve diğer birçok aferin hizmetler gibi örneğin yapın.

Eklendi: Re: Linux bir hizmeti çalıştıran. Linux sizin lezzet bağlıdır. Eğer uygulama hizmeti otomatik olarak başarısız olursa yeniden başladı, artı günlük, ödeme Runit olacak emin olmak istiyorsanız:

http://blogs.techrepublic.com.com/opensource/?p=202

http://smarden.org/runit

Eklendi: yerine setuid'dir bit, ben sudo sistemini kullanarak (yorumunda) Frank'in öneri daha iyi olduğunu düşünüyorum.

Yani, burada üç adet var:

  • Kök ayrıcalık olmadan web sunucusu
  • Bir uygulama
  • Uygulamayı takip edilen bir servistir

Senin sorunun onu yazma, ve kök ayrıcalık gerek kalmadan, web sunucusu kendisiyle iletişim, cini başlatıyor değildir.

Bir daemon arka planda başlatılan etkileşimli olmayan bir uygulama olarak basit olabilir:

# my_dameon &

I am not a php developper, but searching for message queue and php, I discovered beanstalkd
Looking at the example on the first page it seems you can use it to do the following :

  • Apache / php beanstalkd bazı mesajı gönderir
  • Cinin beanstalkd gelen mesajı okur. Komuta dayanarak başlatır veya öldürmek veya arka plan uygulamasını yükleyin.

You can write your daemon in php, since there are client in many languages
You can also check this question

Sen aşağıdaki komutları kabul eden bir cini oluşturabilirsiniz:

  • daemon_name start
  • daemon_name stop
  • daemon_name restart
  • deamon_name reload

Cini Başlangıç ​​zor olmamalı. Sadece daemon_name start bir PHP komut dosyası yürütme çalıştırmak gerekir. Başlattıktan sonra, (, durdurma yeniden başlatmadan veya daha sonra yeniden yüklemek için) bir kilit dosyası sürecin PID yazabilirsiniz. Daemon sinyalleri işlemesi gerekir.

Bir PHP komut dosyası, daha sonra çağırabilirsiniz daemon_name stop. Bu kilit dosyasını kontrol ve çalışan daemon PıD'YI almak ve çalışan hayalet tarafından ele olacak bir sinyal göndermek istiyorsunuz, yeni bir cini kadar ateş gerekir. Kilit dosyası / kaldırıldı temizlenir ve ardından stop başlatılması daemon / süreç çıkabilirsiniz edilmelidir.

Ben size hizmet her türlü çalıştırmak için yapılandırılabilir ki, inetd bakmak gerektiğini düşünüyorum, ve root olarak çalışır. Daha sonra kök ayrıcalıklı kendisi değildir nispeten basit bir program yazabilirsiniz, ama root tarafından çalıştırdığınızda görevleri bitti gerek yok ki.

Bildiğim kadarıyla hizmeti ile iletişim gibi ancak en yaygın yöntemler UNIX yuva veya MMAP yoluyla comunicate olacağını kendin yazıyoruz varsayarak, o ne tür bir hizmet söylemedi. Gerçekten sizin ihtiyaçlarınıza bağlıdır.

Oh evet, Linux sistemlerin web yönetimi için uygulamalar var zaten işaret etmelidir. Webmin ihtiyacınız olduğu kadar çok veya az kontrole izin verecek şekilde yapılandırılmış olabilir gerçekten iyi biridir.

@ Shodanex anlaşılacağı gibi, Beanstalkd kullanarak çalışan bir-olarak-kök komut satırı işçi bir web ön uç bağlantısını kesmek için mükemmel bir yol olacaktır. Bu trivially sadece gerekli tam olarak ne çalıştırmak için ayarlanmış olabilir.

Işçi çalıştırmak için, Pear's System_Daemon start / / restart durdurma, bir cin-çalışan komut dosyası oluşturmak ve çalıştırmak.

Yaparken, bu çok çok dikkatli olun. Herhangi bir kullanıcı exec komutu web veri gönderilen asla kullanmayın. Bu kimse keyfi sizin makinenizde komutları çalıştırmasına izin verebilir.

Eğer ihtiyacınız izinleri ile bu özel komutunu çalıştırın ama başka bir şey olabilir bu yüzden de ben ikinci Frank sudo kuralı kullanabilirsiniz. Bu şekilde daha güvenli olacaktır.

Elbette birlikte

sudo apt-get install openbsd-inetd

İstediğiniz bir hizmet oluşturabilirsiniz