在没有退出的情况下自动执行Ruby命令

时间:2013-05-25 15:11:27

标签: ruby

希望这应该是一个容易回答的问题。我试图自动运行mumble-ruby我已经完成所有操作并运行除了运行这个简单的脚本后它运行但结束。简而言之:

  • 从终端运行我得到“按Enter键终止脚本”,它可以工作。
  • 通过cronjob运行此脚本会运行脚本但结束它并运行cli.disconnect(我假设)。

我希望以下脚本在指定时间通过cronjob自动运行,直到服务器关闭才结束。

#!/usr/bin/env ruby

require 'mumble-ruby'

cli = Mumble::Client.new('IP Address', Port, 'MusicBot', 'Password')
cli.connect
sleep(1)
cli.join_channel(5)
stream = cli.stream_raw_audio('/tmp/mumble.fifo')
stream.volume = 2.7

print 'Press enter to terminate script';
gets
cli.disconnect

3 个答案:

答案 0 :(得分:3)

假设您使用的是Unix / Linux系统,则可以在screen会话中运行它。 (这是Unix命令,而不是脚本功能。)

如果您不知道screen是什么,它基本上是一个“可拆卸的”终端会话。您可以打开screen会话,运行此脚本,然后从该screen会话中分离。即使在您注销之后,该分离的会话也将保持活动状态,让您的脚本保持运行状态。 (如果要手动关闭,可以稍后重新连接到screen会话。)

screen非常简洁,Unix / Linux上的每个开发人员都应该了解它。

如何在不阅读任何文档的情况下执行此操作:

  • 在将运行脚本的服务器上打开终端会话
  • 运行screen - 您现在将在新的屏幕会话中处于新的shell提示符
  • 运行您的脚本
  • 键入ctrl-a然后d(不带ctrl;“d”用于“分离”)从screen分离(但仍然保持运行)

现在你回到了你的第一个shell。您的screen会话中的脚本仍处于活动状态。您可以断开连接,screen会话将保持卡车运输。

您想重新使用screen并手动关闭应用吗?简单!运行screen -r(用于“重新附加”)。要终止screen会话,只需重新挂接并退出shell。

您也可以同时运行多个screen个会话。 (如果有多个screen正在运行,则需要向screen -r提供参数。)

查看一些screen文档!

Here's a screen howto.搜索“gnu screen howto”等等。

答案 1 :(得分:1)

使用无限循环。尝试:

while running do
  sleep(3600)
end

您可以在需要时使用exit终止。这将每小时运行一次循环,因此它不会占用处理时间。在断开连接方法之前的无限循环将阻止在服务器关闭之前调用它。

答案 2 :(得分:1)

很多方法可以给这只猫上皮......:)

我的想法是拿你的脚本(称之为foo)并删除最后3行。在你的/etc/rc.d/rc.local文件中(注意:这适用于Ubuntu和Fedora,不确定你在运行什么 - 但它有类似的东西)你要在文件的末尾添加nohup /path_to_foo/foo 2>&1 > /dev/null&以便它在后台运行。如果您只想运行该命令并使其运行,您也可以直接在终端上运行该命令。您必须确保使用foo使chmod +x /path_to_foo/foo可执行。