Frage

Ich habe einen Ruby-Skript geschrieben, die dlink Admin-Seite in Firefox öffnet und hat eine ADSL-Verbindung oder Trennung.

Ich kann diesen Skript im Terminal ohne Probleme läuft. Aber wenn ich es als Cron-Job setzen, ist es nicht anwerfen firefox.

Dies ist der Eintrag Ich habe in crontab

# connect to dataone
55 17 * * * ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test

Ich sehe die folgenden Einträge in / tmp / cron_test. So sieht es aus wie das Skript in der Tat lief.

PROFILE: 
i486-linux
/usr/bin/firefox -jssh

Aber ich konnte nicht herausfinden, warum ich nicht firefox Öffnung sah nach oben, für diese Automatisierung zu arbeiten. Hier ist /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

Jede Hilfe ist willkommen.

War es hilfreich?

Lösung

Sie benötigen eine DISPLAY Umwelt haben bei einem gültigen X-Server verweist. Dies könnte entweder bedeuten sie auf den Wert „: 0.0“ (ohne Anführungszeichen), so dass es zu Ihrem lokalen Standard DISPLAY bezieht.

Es gibt ein paar Dinge im Auge zu behalten, wenn: Sie könnten einen X virtuellen Rahmenpuffer (xvfb) ausgeführt werden, so dass Firefox verwendet einfach das, wie es ist angezeigt. Dies würde bedeuten, dass Firefox seine all grafischen Operationen zu tun, wäre in der Lage, sondern dass sie von Ihrer Standard-grafischen Umgebung unabhängig sein würden. Sie werden den DISPLAY-Variable gesetzt, um so ein, dass es auf die xvfb Instanz verweist. wenn Sie aufrufen xvfb Zum Beispiel wie folgt:

Xvfb :1 -screen 0 1600x1200x32

Dann werden Sie in der Lage sein, dies zu verwenden, indem Sie die Variable DISPLAY auf Einstellung: 1

Sie beginnen eine ausgewachsene firefox Instanz einfach Ihr Modem anschließen oder trennen. Sie würden wahrscheinlich in der Lage sein zu verwenden „curl“ die entsprechenden HTTP-Anfragen an den Server zu senden, so dass es für Sie ein Verbindungs- oder Trennungs führt. Ein Weg, um triviale sehen, was Sie sollten wären neu eine Firefox-Plugin wie Livehttpheaders zu installieren und notieren die wichtigsten HTTP-Anforderungen, wie Sie die Aktionen manuell ausführen.

Es gibt sogar einen Rubin für curl Bindung: Libcurl für Ruby . Das resultierende Skript sollte viel kleiner als die aktuelle Skript sein.

Andere Tipps

Programme von cron nicht über Ihre interaktive Umgebung. Daher haben und Variable DISPLAY sie nicht, und so können Sie keine X (grafische) Programme ausführen, zum Beispiel Firefox.

Ich würde vorschlagen, die HTTP-Verbindungen selbst, in Ruby zu tun, anstatt zu versuchen, Firefox zu automatisieren.

der crontab-Eintrag ist falsch

es ist wie

#min  hour  day  month  dow  user                command
55    17    *    *      *    ur_user_is_missing  ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top