Mulai tomcat saat startup dengan hak administratif

23

Saya perlu satu proses yang berjalan sebelum masuk ke sistem. Bagaimana menjalankannya seperti layanan? bagaimana cara saya membuat layanan di Linux?

Di Ubuntu dan Fedora? Layanan ini disesuaikan kucing jantan

Sajad Bahmani
sumber
6
Bagaimana layanan memulai sangat tergantung pada distro Linux. Beri tahu kami apa yang ingin Anda capai (dan pada distro apa dan mungkin Lingkungan Desktop), karena saat ini saya pikir Anda mungkin tidak memikirkan masalah dengan benar.
xenoterracide

Jawaban:

23

Untuk menjalankan layanan tanpa atau sebelum masuk ke sistem (yaitu "saat boot"), Anda harus membuat skrip startup dan menambahkannya ke urutan boot.
Ada tiga bagian skrip layanan: mulai, berhenti dan mulai ulang.
Struktur dasar skrip layanan adalah:

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

Setelah Anda mengubah skrip sesuai keinginan Anda, cukup tempatkan di /etc/init.d/
Dan, tambahkan ke proses startup layanan sistem (di Fedora, saya bukan pengguna Ubuntu,> D):

chkconfig -add <ServiceName>  

Layanan akan ditambahkan ke proses boot sistem dan Anda tidak perlu memulai lagi secara manual.

Tepuk tangan!

wormintrude
sumber
2
Perhatikan bahwa saat memulai, berhenti, dan mulai ulang biasanya cukup untuk skrip init sederhana. Anda mungkin juga ingin memasukkan tindakan 'status', yang mudah di Debian dan distro lain yang menyertakan status_of_proc () dalam paket fungsi init-nya. Paket yang dikelola dengan baik akan mencakup semua fungsi yang diperlukan oleh LSB ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). Skrip init yang didistribusikan dengan tomcat di Ubuntu berisi semua tindakan ini, mungkin bertaruh untuk menggunakannya saja.
Steven D
19

Tergantung pada sistem init, Anda membuat skrip init secara berbeda. Fedora memberi Anda pemula dan systemd untuk dipilih, dan tentu saja kompatibilitas SysV.

Pemula

  • buat file definisi layanan sebagai /etc/init/custom-tomcat.conf
  • letakkan di dalam:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

Dan Tomcat Anda harus mulai pada saat sistem mulai.

Systemd

  • buat definisi layanan di /etc/systemd/system/custom-tomcat.service
  • letakkan di dalam:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

dan aktifkan layanan Anda menggunakan systemctl enable custom-tomcat.service. Ini akan dimulai setiap boot normal.

Tentu saja ada beberapa opsi konfigurasi untuk kedua sistem init, Anda dapat memeriksanya dalam dokumentasinya.

zdzichu
sumber
7

Tomcat adalah layanan yang cukup umum, saya akan merekomendasikan melihat skrip init yang disediakan oleh distro. Peluangnya bekerja dengan biner Anda yang disesuaikan, dengan sedikit atau tanpa tweaker.

xenoterracide
sumber
6

Jika Anda memiliki crondaemon, salah satu kait waktu cron yang telah ditentukan adalah @reboot, yang secara alami berjalan saat sistem dimulai. Jalankan crontab -euntuk mengedit crontabfile Anda , dan tambahkan baris:

@reboot /your/command/here
Michael Mrozek
sumber
Apakah ini berlaku untuk semua startup, atau hanya reboot?
WhyNotHugo
Ini HANYA berlaku untuk fcron - bukan vixie-cron atau AFAIK cron lainnya.
Maciej Piechotka
@ Maciej Ini pasti berfungsi untuk vixie-cron; itulah yang saya gunakan
Michael Mrozek
@Hugo Semua startup
Michael Mrozek
6

Untuk hanya menjalankan skrip setelah komputer dimulai tetapi sebelum pengguna masuk, Anda cukup mengedit skrip /etc/rc.local yang dimaksudkan untuk menyelesaikan tugas ini dengan tepat.

fschmitt
sumber
3

Anda dapat membuat skrip yang lebih canggih, yang memungkinkan Anda berjalan di bawah izin pengguna tertentu, sebagai berikut:

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

Skrip berjalan di /etc/init.d/myservice, dan Anda memulai layanan dengan menjalankan:

/etc/init.d/myservice start

Baca halaman manual pada start-stop-daemon untuk memahami cara kerjanya.

Tuan Ed
sumber
1

Di Ubuntu atau Debian seperti yang dapat Anda gunakan, untuk menambahkan

update-rc.d your_service defaults

untuk menghapus

update-rc.d -f your_service remove

Sampai jumpa! \Hai

bagus untuk mengimplementasikan status fungsi dan memuat ulang secara paksa agar menjadi LSB-compilant

MaikoID
sumber
bagaimana cara membuat daemon saya muncul di service --status-alldaftar?
Necktwi