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