Menjalankan bundle exec Lewat Systemd

Kemarin seharian saya ngulik chatbot telegram yang dikembangkan menggunakan lita.io dan Ruby. Bot ini saya buat untuk keperluan alumni peserta course Ruby dan Ruby on Rails bareng saya. Awalnya bot jalan di lokal, lama-lama kelihatan tidak reliable karena koneksi internet saya yang lagi sering gangguan. Dari situ terpicu untuk menjalankannya di vps digital ocean.

Awam dunia ops tapi sedikit-sedikit ngerti, saya terpikir untuk ngulik systemd atau semacamnya yang intinya program yang kita buat running di background. Niat ini diurungkan dulu karena butuhnya saat itu juga dan saya tahu cara yang lebih cepet, menggunakan tmux. Jadilah saya buat session tmux baru tmux new -s idrailsbot kemudian jalankan bundle exec lita dan yang terakhir detach session-nya. Terdengar bukan best practice memang tapi untuk kebutuhan yang sesederhana itu solusi ini cukup.

Siang sampai malam lancar jaya bot-nya. Ketika makan malam, sambil ngobrol dengan teman lewat telegram, saya arahkan topik seputar systemd. Selesai makan langsung saya buka laptop lagi dan mulai ngulik. Setelah beberapa trial dan error dan panduan dari dia, akhirnya berhasil. Sekarang chatbot-nya running lewat systemd hehe, terdengar lebih “benar” dan fancy dibanding yang sebelumnya.

Berikut ini konfigurasi yang saya buat.

File /lib/systemd/system/idrailsbot.service

User berperan penting untuk menge-set user mana yang dipakai ketika menjalankan perintah yang ada di ExecStart. Di dalam ExecStart perintah yang dijalankan menggunakan bundle yang mana di mesin saya hanya user deploy yang punya akses, makanya penting banget pengesetan user ini.

WorkingDirectory penting juga, biar systemd tahu perintah di dalam ExecStart ini dijalankan di mana.

Potongan selanjutnya adalah ExecStart. Bolah dibilang dia yang jadi aktor utama. Oh ya perintah yang dijalankan mesti full path, jadi ga bisa cuma menjalankan bundle exec, harus lengkap /home/deploy/.rbenv/shims/bundle exec. Buat tahu path lengkap gunakan perintah which, contohnya which bundle

Setelah cukup otak-atik file service, saatnya menjalankannya. Perintah di bawah ini yang digunakan

Perintah di atas cuma menjalankan service. Ketika kita butuh service otomatis dijalankan saat mesin nyala (reboot/restart), perintah berikut perlu juga dieksekusi

Biar yakin service sudah jalan atau jangan-jangan gagal jalan, cek status service dengan perintah ini

Kode terbaru ketika mau di-deploy perlu restart service dulu

Di awal sering banget kena error, buat ngecek log-nya, pakai perintah ini

Titik penting ngoprek semalam ketika nemu link ini https://stackoverflow.com/questions/49816931/running-ruby-project-with-systemd-service-cannot-find-gemfile

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

Your email address will not be published. Required fields are marked *