GNU/Linux >> Linux の 問題 >  >> Linux

サービスとしての Ruby スクリプト

10 年以上経った後に私の回答を投稿 元の投稿者は質問をしました。

まず、無限ループを実行する単純な ruby​​ スクリプトを作成しましょう:

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

アンパサンドを追加すると、バックグラウンドでスクリプトを実行できます:

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

このスクリプトを自動的に開始し、停止またはクラッシュしたときに再起動するには、サービスを作成します。

# 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

それでは、このサービス ファイルを systemd ディレクトリにコピーしましょう:

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

最後に、enable を使用します コマンドを実行して、システムが起動するたびにサービスが開始されるようにします:

sudo systemctl enable mydaemon.service

サービスは、標準の systemd を使用して開始、停止、または再開できます コマンド:

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

ソース


RAA - deamons は、ruby スクリプトから UNIX デーモンを作成するための非常に便利なツールです。


実際、Ruby スクリプトを使用することで、これを行うためのはるかに優れた方法を見つけました。

これが私がやった方法です:

まず、デーモンをインストールしました

gem install daemons

それから私は:

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

次に、次のようなスクリプトを呼び出すことができる runner.rb というファイルを作成します。

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

Daemons は素晴らしい逸品です!


Linux
  1. Systemdのスタートアップスクリプトを書く方法は?

  2. ネットワーキングの開始後にスクリプトを実行させますか?

  3. サービスがスクリプトで実行されているかどうかをテストする「適切な」方法は?

  1. Linux – Fsckスクリプトの場所?

  2. Init.dスクリプトが起動時に実行されていませんか?

  3. ワンライナー対スクリプト?

  1. Linux OS サービス「dhcpd」

  2. Linux OS サービス「anacron」

  3. Linux OS サービス「iptables」