Jalankan layanan MongoDB sebagai daemon SystemD di Ubuntu 15.10

12

MongoDB hanya mendukung versi Dukungan Jangka Panjang Ubuntu (LTS). Yang terakhir adalah Ubuntu 14,04 LTS, di mana proses init dikelola oleh Upstart milik Canonical. Namun saya menggunakan Ubuntu 15.10 dengan proses init standar Linux SystemD. Jadi saya tidak bisa memulai layanan MongoDB saat boot.

Ketika saya membaca status layanan atau mencoba memulainya, perlihatkan pesan "gagal dimuat":

> systemctl status mongod
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
> sudo systemctl start mongod
Failed to start mongod.service: Unit mongod.service failed to load: No such file or directory.

Saya menjalankan MongoDB 3.2 Community Edition (mongodb-org) resmi dari https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/ bukan paket meta-paket MongoDB 2.6 (mongodb) dari Ubuntu gudang.

> sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
> echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
> sudo apt-get update
> sudo apt-get install -y mongodb-org

Ada yang tahu cara memulai MongoDB dengan SystemD?

Fernando Santucci
sumber
1
masalah saya adalah file konfigurasi kustom yang tidak memalsukan mongod, di sini adalah potongan dari mongod conf default yang saya lewatkan, processManagement: fork: true pidFilePath:
/var/run/mongod.pid

Jawaban:

25

Saya berhasil memulai layanan MongoDB dengan SystemD saat boot:

Saya menghapus instalan paket meta resmi (mongodb-org) v3.2, kemudian saya menginstal paket meta (mongodb) v2.6 dari repositori Ubuntu:

> sudo apt-get remove mongodb-org
> sudo apt-get install mongodb

Buat file konfigurasi layanan seperti yang ditunjukkan di bawah ini:

> cd /lib/systemd/system
> sudo touch mongodb.service
> sudo nano mongodb.service
[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongodb.conf

[Install]
WantedBy=multi-user.target

Verifikasi dalam daftar jika layanan ini diaktifkan atau dinonaktifkan menggunakan perintah di bawah ini:

> systemctl list-unit-files --type=service
...
mongodb.service             disabled
...

Jika dinonaktifkan atau tidak ada dalam daftar, aktifkan:

> sudo systemctl enable mongodb.service

Periksa lagi:

> systemctl list-unit-files --type=service 
...
mongodb.service             enabled
...

Sekarang Anda dapat mengelola layanan pada proses init SystemD:

> systemctl status mongodb
> sudo systemctl stop mongodb
> sudo systemctl start mongodb
> sudo systemctl restart mongodb

Nikmati!

Fernando Santucci
sumber
Lihat askubuntu.com/a/617869/43344 untuk penunjuk ke bagian definisi layanan yang Anda lewatkan. Perhatikan juga bahwa unit layanan yang disediakan dan ditulis oleh administrator lokal tidak boleh masuk /lib.
JdeBP
1
Unit layanan itu ditulis oleh Canonical, bukan oleh administrator lokal, maka mereka harus berada di /lib. Bagian-bagian dari definisi layanan cukup baik untuk memulai layanan, pengaturan tambahan tidak berpengaruh signifikan, sehingga dianggap saling melengkapi. Jika Anda menambahkan PIDFile=/var/run/mongodb/mongod.pidbaris dan runinstruksi on ExecStart=line, Anda mendapatkan kesalahan, karena saya menggunakan paket meta (mongodb) 2.6, bukan paket meta (mongodb-org) 3.2.
Fernando Santucci
1
Mengapa turun memilih, saya terbalik. Saya juga menghadapi masalah serupa dan jawaban ini membantu, terima kasih.
Tien Do
Ini sangat membantu memindahkan dari Ubuntu 14 ke 18, satu-satunya tambahan saya adalah bahwa saya harus membuat ulang data dan direktori log dan chownmereka sebelum mongod akan mulai melalui systemctl. Tidak ada dokumen instal yang tidak akan memberi tahu saya tetapi jika itu membantu!
Tom J Nowell
6

Pada instalasi default dari repositori MongoDB, untuk memiliki startup otomatis layanan mongod , yang perlu Anda lakukan adalah mengaktifkan layanan system.d:

systemctl enable mongod.service(memperhatikan nama layanan mongo d , bukan mongodb )

CATATAN: ini diuji pada Debian / GNU Jessie 8.x dengan systemd dan Ubuntu Xerus 16.04 LTS.

stamster
sumber
Ini juga berlaku untuk Ubuntu Xerus 16.04 LTS. Setelah menginstal dari repo resmi, Anda harus mengaktifkan unit layanan systemd! Saya baru saja mengkonfirmasi dengan instalasi contoh lain ... :)
stamster
1
File tersebut ada di /lib/systemd/system/mongod.servicedalam Ubuntu 16.04 saya
Jyotman Singh
Ya, definisi unit sistemd ada tetapi dinonaktifkan, jadi Anda harus mengaktifkannya agar otomatis dimulai setiap kali Anda me-reboot instans Anda.
stamster