Skip to main content

Java ile linux servisi nasıl yazılır?

Windows servisleri bir çok windows kullanıcısının bildiği bir kavramdır. Microsoft teknolojileriyle ilgilenen bir yazılımcı da mutlaka bir windows servis yazmış ya da yapısı hakkında az da olsa bilgi sahibidir.

İşletim sistemi arkasında çalışan bu servislerin Linux'da bir karşılığı var mı? Evet var, eğer hali hazırda bir linux kullanıcısıysanız terminali açıp service --status -all yazarak sisteminizde o anda kayıtlı tüm servisleri görebilirsiniz.

Windows servisi yazmak için Visual Studio üzerinden bir servis projesi açıp, gelen template'i ihtiyaçlarımıza göre kodlamak yeterlidir. Daha sonra bir installer yardımıyla servisimizi kurabiliriz.

Peki bu işlemleri Linux ortamında nasıl yapacağız?

Daha anlaşılır olması adına tüm adımları sırayla açıklamaya çalışacağım.


  1. Bir servis için geliştirme ortamınızda bir Console uygulaması açmanız yeterlidir.
  2. Uygulamamızı yazdıktan sonra jar paketini hazırlamamız gerekiyor.
  3. Jar paketi hazır olduktan sonra, geriye sadece kullanıcı login olduktan sonra bu paketi çalıştırma işlemi kalıyor. Bu işlemi yapmak için bir .sh script dosyası kullanacağız.
  4. Boş bir .sh uzantılı bir dosya oluşturun. ( Örneğin : MyService.sh)
  5. Daha sonra dosyaya aşağıda ki kodu yapıştırın.
    #!/bin/sh
    SERVICE_NAME=MyService
    PATH_TO_JAR=/usr/local/MyProject/MyJar.jar
    PID_PATH_NAME=/tmp/MyService-pid
    case $1 in
        start)
            echo "Starting $SERVICE_NAME ..."
            if [ ! -f $PID_PATH_NAME ]; then
                nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
                            echo $! > $PID_PATH_NAME
                echo "$SERVICE_NAME started ..."
            else
                echo "$SERVICE_NAME is already running ..."
            fi
        ;;
        stop)
            if [ -f $PID_PATH_NAME ]; then
                PID=$(cat $PID_PATH_NAME);
                echo "$SERVICE_NAME stoping ..."
                kill $PID;
                echo "$SERVICE_NAME stopped ..."
                rm $PID_PATH_NAME
            else
                echo "$SERVICE_NAME is not running ..."
            fi
        ;;
        restart)
            if [ -f $PID_PATH_NAME ]; then
                PID=$(cat $PID_PATH_NAME);
                echo "$SERVICE_NAME stopping ...";
                kill $PID;
                echo "$SERVICE_NAME stopped ...";
                rm $PID_PATH_NAME
                echo "$SERVICE_NAME starting ..."
                nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
                            echo $! > $PID_PATH_NAME
                echo "$SERVICE_NAME started ..."
            else
                echo "$SERVICE_NAME is not running ..."
            fi
        ;;
    esac
  6. Burada dosyanın en üstünde yer alan SERVICE_NAME ve PATH_TO_JAR birer parametredir. Sizde kendinize göre bu alanları güncelleyin.
  7. Yazmış olduğumuz bu sh uzantılı dosyayı servisimizi işletim sistemine tanıtmak için kullanacağız.
  8. Bu işlem için yapmamız gereken tek şey bu dosyayı /etc/init.d/ klasörüne atıp gerekli izinleri vermektir.
  9. Login olduğunuz kullanıcıyla muhtemelen /etc/init.d/ adresinde bir işlem yapamayacaksınız. Güvenlik nedeniyle bu adrese sadece root kullanıcısı yetkileriyle erişebilirsiniz.
  10. Anlık olarak root kullanıcısı yetkileriyle işlem yapmak için terminal üzerinden su - komutunu yazın ve şifrenizi girin. Daha sonra oluşturduğumuz .sh dosyasını /etc/init.d adresine kopyalayın.
  11. Geriye sadece 2 işlem kaldı. Kopyaladığımız bu dosyaya okuma yetkisi vermek ve bu servisimizi startup'a eklemek. Bu işlemler için için aşağıdaki komutları çalıştırabilirsiniz. Servisimiz artık hazır, restart yapıp servisimizin çalıştığını görebilirsiniz.
          chmod +x /etc/init.d/MyService.sh
          sudo update-rc.d MyService.sh defaults

   



Comments

Popular posts from this blog

En basit şekliyle Sql Join

WCF Servisinin HTTPS Yayını ve Metotlarına Kullanıcı adı Parola ile Erişim

Giriş Bu yazıda bir wcf servisinin https olarak bir iis üzerinde yayınlanmasını ve de servis metotlarının bir kullanıcı adı ve şifre korunması için neler yapılması gerektiğini bulabilirsiniz. Not: Bu yazıda Wcf servisi bir web application üzerinde yer almaktadır. Gerekli Tool’lar SelfCert.exe:  Servisin yayınlanacağı iis için gerekli ola sertifika oluşturmak    için kullanacağız. winhttpcertcfg.msi:  Command line’dan komut çalıştıracağımız bir exe’dir. Oluşturduğumuz sertifikanın iis’de yer alan application pool tarafından okunabilmesine izin verilmesi için kullanılır. WCF Servis Ayarları Wcf servisi güvenliğini ve verilerinin gizlilğini iki aşamalı bir koruma ile  sağlayacağız: Clientların servis içerisinde yer alan metotlara erişebilmeleri için izin verilen kullanıcı adı ve paraloları bilmesi gerekmektedir. Bu amaçla servis uygulamasına bir adet .cs file ekleyip içerisini Custom Validation da ki gibi dolduralım. Bu işlemden sonra içi...

ASP.NET uygulamalarında WebResource kullanımı (WebResource.axd)

          Web uygulamalarında genellikle resourcelar uygulama içerisine eklenerek sayfalarda path'lari ile çağırılırlar. Bu kullanım açısıdan çok kullanışlı bir yöntem değildir. Şöyleki bazı resourcelarımız her uygulamada olması gereken resourcelardır. Bu resourceları her uygulamaya eklemek etkili bir kullanım değildir. Bunun yerine webresource yöntemiyle istediğimiz resoruceları bir class libary(dll) içerisine koyup, uygulamalarımıza bu dll'i eklememiz daha kullanışlı bir yöntem olacaktır. Bu yazıda da bir image libary dll oluşturmayı ve uygulama içerisinden bu dll içerisinde yer alan resimler çağırmayı adım adım anlatmaya çalışacağım. 1)Solution'ımız 2 adet proje oluşturalım.   - WebApplication(WebApp)   -Class Libary(ResourceLibary) 2)Image libary olarak kullanacağımız dll içerisine image'larımızı ekleyelim. 3)Her bir image'ın üzerine sağ click ile açılan window üzerinden Build Action özelliğini Embedded Resource olarak değiştirelim. ...