Mar*_*ona 14
我实际上通过使用ruby脚本找到了更好的方法.
我就这样做了:
首先,我安装了守护进程
gem install daemons
Run Code Online (Sandbox Code Playgroud)
然后我做了:
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
Run Code Online (Sandbox Code Playgroud)
然后我创建一个名为runner.rb的文件,在其中我可以调用我的脚本,例如:
require "/var/www/rails/my_project/config/environment"
Post.send('details....')
Run Code Online (Sandbox Code Playgroud)
守护进程是一个伟大的宝石!
在原始海报提出这个问题十多年后发布我的答案。
首先,让我们创建一个简单的 ruby 脚本,它将运行无限循环:
# mydaemon.rb
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
puts i
sleep(3)
end
Run Code Online (Sandbox Code Playgroud)
您可以通过附加&符号在后台运行脚本:
/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
Run Code Online (Sandbox Code Playgroud)
为了自动启动此脚本并在停止或崩溃时重新启动它,我们将创建一个服务。
# 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
Run Code Online (Sandbox Code Playgroud)
现在,让我们将此服务文件复制到 systemd 目录:
sudo cp mydaemon.service /lib/systemd/system -v
Run Code Online (Sandbox Code Playgroud)
最后,使用enable命令确保该服务在系统启动时启动:
sudo systemctl enable mydaemon.service
Run Code Online (Sandbox Code Playgroud)
可以使用标准systemd命令启动、停止或重新启动该服务:
sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6462 次 |
| 最近记录: |