GNU/Linux >> Belajar Linux >  >> Linux

Skrip Ruby sebagai layanan

Memposting jawaban saya setelah lebih dari satu dekade, Poster Asli mengajukan pertanyaan.

Pertama, mari buat skrip ruby ​​​​sederhana, yang akan menjalankan loop tak terbatas:

# mydaemon.rb 
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
  puts i
  sleep(3)
end

Anda dapat menjalankan skrip di latar belakang dengan menambahkan ampersand:

/home/rmishra$ ruby mydaemon.rb &
[1] *pid*

Untuk memulai skrip ini secara otomatis dan memulai ulang setiap kali dihentikan atau mogok, kami akan membuat layanan.

# mydaemon.service
[Unit]
Description=Simple supervisor

[Service]
User=username
Group=username
WorkingDirectory=/home/username
Restart=always
ExecStart=/usr/bin/ruby mydaemon.rb

[Install]
WantedBy=multi-user.target

Sekarang, mari salin file layanan ini ke direktori systemd:

sudo cp mydaemon.service /lib/systemd/system -v

Terakhir, gunakan enable perintah untuk memastikan bahwa layanan dimulai setiap kali sistem melakukan booting:

sudo systemctl enable mydaemon.service

Layanan dapat dimulai, dihentikan, atau dimulai ulang menggunakan systemd standar perintah:

sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon

Sumber


RAA - deamons adalah alat yang sangat berguna untuk membuat daemon unix dari skrip ruby.


Saya sebenarnya telah menemukan cara yang jauh lebih baik untuk melakukannya dengan menggunakan skrip ruby.

Inilah cara saya melakukannya:

Pertama-tama, saya menginstal daemon

gem install daemons

Lalu saya melakukannya:

require 'rubygems'
require 'daemons'

pwd  = File.dirname(File.expand_path(__FILE__))
file = pwd + '/runner.rb'

Daemons.run_proc(
   'my_project', # name of daemon
   :log_output => true
 ) do
   exec "ruby #{file}"
end

Saya kemudian membuat file bernama runner.rb, di mana saya dapat memanggil skrip saya seperti:

require "/var/www/rails/my_project/config/environment"
Post.send('details....')

Daemon adalah permata yang luar biasa!


Linux
  1. Bagaimana Cara Menulis Script Startup Untuk Systemd?

  2. Penyebab Script Untuk Dieksekusi Setelah Jaringan Dimulai?

  3. Cara "Tepat" Untuk Menguji Jika Suatu Layanan Berjalan Dalam Skrip?

  1. Skrip Init.d Tidak Dijalankan Saat Boot?

  2. Skrip Vs Satu Baris?

  3. Layanan Systemctl Habis Saat Mulai?

  1. Layanan OS Linux 'dhcpd'

  2. Layanan OS Linux 'anacron'

  3. Layanan OS Linux 'iptables'