Cara membuat layanan di Ubuntu Upstart

21

Saya memiliki program Java executable yang dapat saya jalankan dengan mengetikkan java -jar abc.jarterminal. Bagaimana saya bisa menjalankannya sebagai layanan? Saya ingin menjalankannya sebagai layanan seperti dengan mengetik service abc start.

mehmet mecek
sumber
Jawaban yang lebih lengkap ada di sini: unix.stackexchange.com/questions/1924/... Pada dasarnya, di Ubuntu Anda dapat membuat skrip untuk /etc/init.d yang dapat memulai / menghentikan / memulai kembali layanan Anda.
Tuan Ed

Jawaban:

41

Pastikan Anda menggunakan 14,04. Ubuntu 16.04 (dan di atas) menggunakan systemd, bukan pemula.

Skrip pemula adalah file skrip yang ditempatkan di /etc/init/dan diakhiri dengan .conf.

Dibutuhkan 2 bagian: satu untuk menunjukkan kapan memulai, dan yang lain dengan perintah untuk mengeksekusi.

Skrip termudah untuk memulai dengan sampel Anda adalah:

# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program

Dibuat sebagai root di bawah /etc/init/myprogram.conf.

Jika skrip Anda memerlukan lebih dari satu baris perintah, gunakan scriptbagian alih-alih execbaris:

# myprogram.conf
start on filesystem
script
    /usr/bin/java -jar /path_to/program
    echo "Another command"
end script

Untuk mengaktifkan penyelesaian bash untuk layanan Anda, tambahkan symlink ke /etc/init.dfolder:

sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram

Kemudian coba mulai dan hentikan:

sudo service myprogram start

Menurut buku masak pemula , Anda dapat membuat pre-start/ post-startdan pre-stop/ post-stopperintah untuk dieksekusi.

Selain itu, saya membaca Anda ingin memeriksa apakah suatu proses sedang berjalan. Periksa pertanyaan ini dan mungkin gunakan pre-startbagian ini.

Rael Gugelmin Cunha
sumber
1
Mungkin Anda perlu membuatnya dieksekusi sudo chmod +x /etc/init.d/myprogram. PERHATIAN: metode Anda yang dijawab tidak berfungsi di Ubuntu 16.04!
juliocesar
2
@ juliocesar 16.04 menggunakan systemd, bukan pemula.
Rael Gugelmin Cunha
start onbukan bait suci yang diperlukan. Seperti yang Anda baca di sini : Pekerjaan seperti itu hanya dapat dikontrol oleh Administrator .
SUB
@ SUB yap, tetapi kemudian pekerjaan tidak akan mulai secara otomatis, dan sudah jelas bahwa penulis pertanyaan menginginkan sesuatu yang bertindak seperti layanan, yaitu, mulai secara otomatis.
Rael Gugelmin Cunha
Ya. Aku tahu. baru saja menambahkan komentar untuk melengkapi jawaban Anda.
SUB
0

Anda perlu membuat pemula. http://upstart.ubuntu.com/getting-started.html

Pemula adalah (IMHO) bencana dibandingkan dengan skrip init ol SysV yang baik. Pemula adalah JAUH lebih banyak upaya dengan sedikit terbalik ke pekerjaan yang ditambahkan. Dengan mengatakan itu, saya menduga akan ada beberapa bek pemula di luar sana yang akan membawa saya ke tugas bagi saya untuk menyatakan yang jelas ;-)

Andrew
sumber
1
Itu hanya sebuah file di /etc/init/yourservice.conf dengan baris yang menunjukkan kapan harus memulai, dan yang lainnya ke perintah exec. Fedora juga menggunakan pemula. Selain itu, bahkan Debian mengubah skema awal menjadi SystemD, yang akan menjadi skema Ubuntu di masa depan.
Rael Gugelmin Cunha