Bagaimana cara membuat file jar dijalankan saat startup & dan ketika Anda logout?

30

Saya tidak tahu harus mulai dari mana. Saya sudah membaca tentang daemon dan tidak mengerti konsepnya.

Keterangan lebih lanjut :

  • Saya telah menulis crawler yang tidak pernah berhenti dan crawler melalui RSS di internet.
  • Perayap telah ditulis dalam java - oleh karena itu sebuah toples sekarang.
  • Saya seorang administrator pada mesin yang memiliki Ubuntu 11.04.
  • Ada beberapa peluang mesin rusak, jadi saya ingin crawler dijalankan setiap kali Anda menyalakan mesin.
  • Selanjutnya, saya ingin tetap berjalan bahkan ketika saya logout. Saya tidak yakin ini mungkin, tetapi sebagian besar waktu saya keluar, dan saya masih ingin merangkak.

Ada ide? Bisakah seseorang mengarahkan saya ke arah yang benar?

Hanya mencari solusi paling sederhana.

RanZilber
sumber

Jawaban:

32

Berikut cara mudah untuk melakukannya menggunakan SysVInit. Instruksi:

  1. Buat skrip start dan stop aplikasi Anda. Letakkan di beberapa direktori, dalam contoh kita adalah:

    • Mulai Skrip: /usr/local/bin/myapp-start.sh
    • Stop Script: /usr/local/bin/myapp-stop.sh

    Masing-masing akan memberikan instruksi untuk menjalankan / menghentikan aplikasi. Misalnya myapp-start.shkonten dapat sesederhana yang berikut ini:

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

    Untuk skrip berhenti dapat berupa sesuatu seperti ini:

    #!/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. Buat skrip berikut ( myscript) dan pakai /etc/init.d.

    /etc/init.d/myscript konten:

    #!/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. Letakkan skrip untuk memulai dengan sistem (menggunakan SysV). Jalankan saja perintah berikut ( sebagai root ):

    update-rc.d myscript defaults 

PS: Saya tahu bahwa Pemula bagus dan bla bla, tapi saya lebih suka sistem init SysV lama.

Marcos Roriz Junior
sumber
1
Tetapi bagaimana sistem akan tahu parameter apa yang akan digunakan? Cara mengatur menjadi "awal". Sudah mencoba di sini dan tidak berhasil.
John John Pichler
1
Ini berfungsi, tetapi perintah "service myapp start" tidak keluar dari perintah.
Tobia
Sekarang bagaimana cara menggunakan opsi start | stop | restart di myscript?
Codevalley
Juga, bahkan setelah melakukan 3 langkah, toples saya tidak berjalan saat startup. Apakah Anda yakin jika kami harus mengubah izin, atau jalur atau semacamnya?
Codevalley
@ Codevalley, seperti yang saya sebutkan, metode ini untuk init SysV. Untuk menggunakan layanan atau perintah lain Anda harus menulis pekerjaan pemula. Tetapi jika Anda akan melakukan ini, Anda harus menulis yang systemd (karena itu menjadi standar)
Marcos Roriz Junior
6

Iya nih! Itu mungkin. :) Pemula adalah cara untuk memastikan layanan tetap berjalan. Ini memiliki lima paket, semua diinstal secara default:

  • Mulai daemon init dan utilitas initctl baru
  • upstart-logd menyediakan daemon logd dan file definisi pekerjaan untuk layanan logd
  • upstart-compat-sysv menyediakan file definisi pekerjaan untuk tugas rc dan alat reboot, runlevel, shutdown, dan telinit yang menyediakan kompatibilitas dengan SysVinit
  • tugas-startup menyediakan file definisi pekerjaan untuk tugas-tugas startup sistem
  • sistem-layanan menyediakan file definisi pekerjaan untuk layanan tty

Pembelajarannya sangat menyenangkan dan sangat berharga. Upstart memiliki situs web: http://upstart.ubuntu.com/


sumber
Dari situs web pemula, pada 2019: "Proyek hanya dalam mode pemeliharaan. Tidak ada fitur baru yang dikembangkan dan saran umum adalah untuk pindah ke sistem init minimal lain atau systemd"
Nav
2

3 saran cepat ...

  1. Buat skrip S tart dalam /etc/rc3.d(mode multi-pengguna) dengan skrip K sakit yang sesuai di dalamnya /etc/rc.0dan /etc/rc6.duntuk mematikan program Java Anda dengan cara yang terkendali saat sistem mati (runevel 0) atau reboot (runlevel 6) Lihat Pengantar Runlevels .

    Anda mungkin dapat memulai aplikasi Java Anda di runlevel 2 (rc2.d) tetapi, sebagai perayap, ia akan membutuhkan TCP / IP. Jadi pastikan layanan jaringan Anda tersedia / mulai di runlevel 2 Anda sebelumnya. Jaringan pasti ada di runlevel 3.

    /etc/init.dberisi semua skrip start / kill aktual. /etc/rcN.ddirektori hanya berisi tautan ke mereka, diawali dengan S atau K untuk memulai atau membunuh mereka masing-masing, per runlevel N.

  2. Sebuah proses yang dijalankan oleh crondharus bertahan antara logout. Mungkin menambahkannya ke crontab Anda.

  3. Proses yang dijalankan dengan nohupjuga harus bertahan. Lihat nohup: jalankan perintah bahkan setelah Anda keluar .

    $ nohup java -jar myapp.jar &

    Secara default, myapp.jaroutput standar akan pergi ke file bernama ./nohup.out, atau $HOME/nohup.outjika yang pertama tidak dapat ditulisi.


sumber
Dan ketika saya logout, apakah masih akan berjalan di latar belakang?
RanZilber
0

Berhati-hatilah saat membuat aplikasi dengan:

  update-rc.d myscript defaults 

Untuk memiliki izin 0755 dan untuk menggunakan atau mendapatkan sebelum jalan .sh Anda. Katakanlah skrip Anda ada di /root/test.sh, Anda harus terlebih dahulu mengubah ke CD /root/sebelum mengakses test.sh.

Jadi cara terbaik adalah membuat SH pada init.d dan mengubah path ke Anda shdan menjalankannya di fungsi start.

Şήøωў
sumber