Firefox无法打开-cron,ruby,firewatir
我编写了一个ruby脚本,该脚本在firefox中打开dlink管理页面,并进行ADSL连接或者断开连接。
我可以在终端中运行此脚本,而不会出现任何问题。但是,如果我把它作为cron工作,它不会启动Firefox。
这是我在crontab中的条目
# connect to dataone 55 17 * * * ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
我在/ tmp / cron_test中看到以下条目。因此,看起来该脚本确实已运行。
PROFILE: i486-linux /usr/bin/firefox -jssh
但是我无法弄清楚为什么我看不到Firefox启用了这种自动化功能。这是/home/raguanu/Dropbox/nettie.rb
#!/usr/bin/ruby -w require 'rubygems' require 'firewatir' require 'optiflag' module Options extend OptiFlagSet character_flag :d do long_form 'disconnect' description 'Mention this flag if you want to disconnect dataone' end flag :l do optional long_form 'admin_link' default 'http://192.168.1.1' description 'Dlink web administration link. Defaults to http://192.168.1.1' end flag :u do optional long_form 'user' default 'admin' description 'Dlink administrator user name. Defaults to "admin"' end flag :p do optional long_form 'password' default 'admin' description 'Dlink administrator password. Defaults to "admin"' end flag :c do optional long_form 'connection_name' default 'bsnl' description 'Dataone connection name. Defaults to "bsnl"' end extended_help_flag :h do long_form 'help' end and_process! end class DlinkAdmin include FireWatir def initialize(admin_link = "http://192.168.1.1", user = 'admin', pwd = 'admin') @admin_link, @user, @pwd = admin_link, user, pwd end def connect( connection_name = 'bsnl' ) goto_connection_page connection_name # disconnect prior to connection @browser.button(:value, 'Disconnect').click # connect @browser.button(:value, 'Connect').click # done! @browser.close end def disconnect( connection_name = 'bsnl' ) goto_connection_page connection_name # disconnect @browser.button(:value, 'Disconnect').click # done! @browser.close end private def goto_connection_page( connection_name = 'bsnl') @browser ||= Firefox.new @browser.goto(@admin_link) # login @browser.text_field(:name, 'uiViewUserName').set(@user) @browser.text_field(:name, 'uiViewPassword').set(@pwd) @browser.button(:value,'Log In').click # setup > dataone @browser.image(:alt, 'Setup').click @browser.link(:text, connection_name).click end end admin = DlinkAdmin.new(Options.flags.l, Options.flags.u, Options.flags.p) unless Options.flags.d? admin.connect( Options.flags.c ) else admin.disconnect( Options.flags.c ) end
任何帮助表示赞赏。
解决方案
crontab条目错误
它像是
#min hour day month dow user command 55 17 * * * ur_user_is_missing ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
从cron运行的程序没有交互式环境。因此,它们没有和DISPLAY变量,因此我们无法运行任何X(图形)程序,例如火狐浏览器。
我建议我们自己使用ruby进行HTTP连接,而不要尝试自动执行Firefox。
我们需要有一个指向有效X服务器的DISPLAY环境。这可能涉及将其设置为值":0.0"(不带引号),以便它引用我们本地的标准DISPLAY。
不过,请记住以下几点:
我们可以运行X虚拟帧缓冲区(xvfb),以便Firefox仅在显示时使用它。这意味着Firefox将能够执行其所有图形操作,但是它将独立于标准图形环境。我们必须适当地设置DISPLAY变量,使其指向xvfb实例。例如,如果我们按如下方式调用xvfb:
Xvfb :1 -screen 0 1600x1200x32
然后,我们可以通过将DISPLAY变量设置为:1来使用它
我们正在启动功能强大的firefox实例来简单地连接或者断开调制解调器。我们很可能能够使用" curl"将适当的HTTP请求发送到服务器,以便它为我们执行连接或者断开连接。简单地查看应重新创建的内容的一种方法是安装Firefox插件(如LiveHTTPHeaders),并在手动执行操作时记下最重要的HTTP请求。
甚至还有红宝石装订来卷曲:
libcurl for Ruby。生成的脚本应该比我们当前的脚本小得多。