Question

J'ai écrit un script ruby ??qui ouvre la page d'administration de Dlink dans Firefox et effectue une connexion ou une déconnexion ADSL.

Je pourrais exécuter ce script dans le terminal sans aucun problème. Mais si je le mets comme travail cron, il ne lance pas firefox.

Ceci est l'entrée que j'ai dans crontab

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

Je vois les entrées suivantes dans / tmp / cron_test. Il semble donc que le script ait effectivement été exécuté.

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

Mais je ne pouvais pas comprendre pourquoi je ne voyais pas Firefox s’ouvrir, pour que cette automatisation fonctionne. Voici /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

Toute aide est appréciée.

Était-ce utile?

La solution

Vous devez disposer d'un environnement DISPLAY pointant vers un serveur X valide. Cela peut impliquer de le définir sur la valeur ": 0.0 " (sans guillemets), de telle sorte qu'il fait référence à votre affichage standard local.

Cependant, il convient de garder quelques points à l’esprit: Vous pouvez exécuter un tampon de cadre virtuel X (xvfb), de sorte que Firefox l’utilise simplement lorsqu’il est affiché. Cela signifierait que Firefox serait capable de faire toutes ses opérations graphiques, mais qu'il serait indépendant de votre environnement graphique standard. Vous devrez définir la variable DISPLAY de manière à ce qu'elle pointe vers l'instance xvfb. Par exemple, si vous appelez xvfb comme suit:

Xvfb :1 -screen 0 1600x1200x32

Vous pourrez ensuite l'utiliser en définissant la variable DISPLAY sur: 1

Vous démarrez une instance firefox complète pour simplement connecter ou déconnecter votre modem. Vous pourrez probablement utiliser " curl " d'envoyer les requêtes HTTP appropriées au serveur, de sorte qu'il se connecte ou se déconnecte pour vous. Une façon simple de voir ce que vous devriez recréer consiste à installer un plugin Firefox tel que LiveHTTPHeaders et à noter les requêtes HTTP les plus importantes au fur et à mesure que vous effectuez les actions manuellement.

Il existe même une reliure rubis pour curl: libcurl pour Ruby . Le script résultant doit être beaucoup plus petit que votre script actuel.

Autres conseils

Les programmes exécutés à partir de cron n'ont pas votre environnement interactif. Par conséquent, ils ne possèdent pas de variable et DISPLAY et vous ne pouvez donc exécuter aucun programme X (graphique), par exemple. Firefox.

Je suggérerais de faire les connexions HTTP vous-même, en ruby, plutôt que d'essayer d'automatiser Firefox.

l'entrée de la crontab est incorrecte

c'est comme

#min  hour  day  month  dow  user                command
55    17    *    *      *    ur_user_is_missing  ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top