Bir jar dosyasının başlangıçta ve ne zaman çıkış yaptığınızda çalıştırılması?


30

Bakmaya nereden başlayacağım hakkında hiçbir fikrim yok. Daemon'lar hakkında okuyordum ve kavramı anlamadım.

Daha fazla detay :

  • İnternette RSS üzerinden hiçbir zaman durmayan ve tarayıcıları olan bir tarayıcı yazıyorum.
  • Tarayıcı, java dilinde yazılmıştır - bu nedenle şu anda bir kavanozdur.
  • Ubuntu 11.04 olan bir makinede yöneticiyim.
  • Makinenin çarpma olasılığı vardır, bu yüzden makineyi her çalıştırışınızda tarayıcının çalışmasını istiyorum.
  • Ayrıca, çıkış yaptığım zaman bile yayınlanmaya devam etmesini istiyorum. Bunun mümkün olabileceğinden emin değilim, ancak çoğu zaman oturumumu kapattım ve hala sürünmesini istiyorum.

Herhangi bir fikir? Birisi beni doğru yöne işaret edebilir mi?

Sadece en basit çözümü arıyorum.

Yanıtlar:


32

İşte bunu SysVInit kullanarak yapmanın kolay bir yolu var. Talimatlar:

  1. Uygulamanızın başlangıç ​​ve bitiş komut dosyasını oluşturun. Bazı dizine koyun, örneğimizde:

    • Komut Dosyasını Başlat: /usr/local/bin/myapp-start.sh
    • Komut Dosyasını Durdur: /usr/local/bin/myapp-stop.sh

    Her biri uygulamayı çalıştırmak / durdurmak için talimatlar sağlayacaktır. Örneğin, myapp-start.shiçerik aşağıdaki kadar basit olabilir:

    #!/bin/bash
    
    java -jar myapp.jar 

    Stop betiği için şöyle bir şey olabilir:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
  2. Aşağıdaki betiği ( myscript) oluşturun ve üzerine yerleştirin /etc/init.d.

    /etc/init.d/myscript içerik:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
  3. Komut dosyasını sistemle başlatmak için kullanın (SysV kullanarak). Aşağıdaki komutu çalıştırın ( root olarak ):

    update-rc.d myscript defaults 

Not: Upstart’ın harika ve bla bla olduğunu biliyorum ama eski SysV init sistemini tercih ediyorum.


1
Fakat sistem hangi parametrenin kullanacağını nasıl bilecek? "Başlat" olarak nasıl ayarlanır. Burada denedim ve işe yaramadı.
John John Pichler

1
Bu çalışır, ancak "service myapp start" komutu komuttan çıkmaz.
Tobia,

Şimdi myscript'te start | stop | restart seçeneklerini nasıl kullanmalı?
Codevalley

Ayrıca, 3 adımı attıktan sonra bile, kavanozum başlangıçta çalışmıyor. İzinleri, yolu ya da onun gibi bir şeyi değiştirmemiz gerektiğinden emin misiniz?
Codevalley

@Codevalley, dediğim gibi, bu yöntem SysV init içindir. Servis veya başka bir komut kullanmak için bir başlangıç ​​işi yazmanız gerekir. Ama eğer bunu yapacaksanız, bir sistemdekiler yazmalısınız (standart hale geldiğinden beri)
Marcos Roriz Junior

6

Evet! Bu mümkün. :) Upstart , hizmetin çalışmaya devam ettiğinden emin olmanın yoludur. Varsayılan olarak kurulu beş paketi vardır:

  • İnit daemon ve initctl yardımcı programını başlatma
  • upstart-logd, logd hizmeti için logd arka plan programı ve iş tanımı dosyası sağlar
  • upstart-compat-sysv, rc görevleri ve SysVinit ile uyumluluk sağlayan yeniden başlatma, çalışma düzeyi, kapatma ve telinit araçları için iş tanımı dosyaları sağlar
  • başlangıç ​​görevleri, sistem başlangıç ​​görevleri için iş tanımı dosyaları sağlar
  • sistem servisleri, tty servisleri için iş tanım dosyaları sağlar

Öğrenme çok zevkli ve buna değer. Başlangıçta bir web sitesi var: http://upstart.ubuntu.com/


Upstart web sitesinden, 2019 itibariyle: "Proje sadece bakım modundadır. Yeni bir özellik geliştirilmemektedir ve genel tavsiye başka bir minimum sisteme veya sisteme geçmek olacaktır"
Nav

2

3 hızlı öneri ...

  1. Bir oluşturun S içinde tart senaryoyu /etc/rc3.dkarşılık gelen (çok kullanıcılı konsol modunda) k hasta komut dosyalarını /etc/rc.0ve /etc/rc6.dkontrollü bir şekilde Java programı öldürmek için sistem aşağı güçler (runevel 0) veya yeniden başlatma (çalışma seviyesi 6) See runlevels bir giriş .

    Java uygulamanızı runlevel 2 (rc2.d) ile başlatabilirsiniz ancak bir tarayıcı olarak TCP / IP'ye ihtiyacı olacaktır. Bu nedenle, ağ servisinizin çalışma seviyeniz 2'de önceden mevcut olduğundan / başladığından emin olun. Network3 kesinlikle çalışma seviyesi 3'te.

    /etc/init.dtüm gerçek start / kill komutlarını içerir. /etc/rcN.ddizinler sadece bunlara bağlantılar içerir, bunları N sırayla başlatmak veya öldürmek için sırasıyla S veya K ile eklenmişlerdir.

  2. Tarafından yürütülen bir işlem crondoturum kapatma arasında kalmalıdır. Belki crontab'ına ekleyebilirsin.

  3. Birlikte çalışacak bir işlem nohupde devam etmelidir. Nohup'a bakınız : siz oturumu kapattıktan sonra bile bir komutu çalıştırın .

    $ nohup java -jar myapp.jar &

    Varsayılan olarak, myapp.jarstandart çıktısı adında bir dosyaya gidecektir ./nohup.out, ya $HOME/nohup.outda eski yazılabilir değilse.


Çıkış yaptığım zaman hala arka planda mı çalışacak?
RanZilber

0

Ayrıca aşağıdakilerle birlikte uygulama yaparken de dikkat edin:

  update-rc.d myscript defaults 

0755 iznine sahip olmak ve .sh yolunuzu kullanmak veya almak. Diyelim ki betiğiniz /root/test.sh adresinde, diyelim ki /root/önce erişmeden önce CD'ye geçmelisiniz test.sh.

Öyleyse en iyi yol init.d'de SH yapmaktır. sh ve start fonksiyonunda çalıştırmak.



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.