質問

Firefoxでdlink管理ページを開き、ADSL接続または切断を行うrubyスクリプトを作成しました。

このスクリプトを端末で問題なく実行できました。しかし、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

ご協力いただければ幸いです。

役に立ちましたか?

解決

有効なXサーバーを指すDISPLAY環境が必要です。これには、値「quot;:0.0」に設定することも含まれます。 (引用符なし)。ローカル標準のDISPLAYを指します。

ただし、留意すべき点がいくつかあります。 X仮想フレームバッファー(xvfb)を実行して、Firefoxがそれを表示として使用するようにすることができます。これは、Firefoxがすべてのグラフィカル操作を実行できることを意味しますが、標準のグラフィカル環境には依存しません。 xvfbインスタンスを指すように、DISPLAY変数を適切に設定する必要があります。たとえば、次のようにxvfbを呼び出す場合:

Xvfb :1 -screen 0 1600x1200x32

次に、DISPLAY変数を:1に設定することでこれを使用できます

モデムを接続または切断するために、本格的なfirefoxインスタンスを起動しています。ほとんどの場合、「カール」を使用できます。適切なHTTPリクエストをサーバーに送信して、接続または切断を実行するようにします。再作成する必要があるものを簡単に確認する1つの方法は、LiveHTTPHeadersなどのFirefoxプラグインをインストールし、アクションを手動で実行するときに最も重要なHTTPリクエストを書き留めることです。

curlにはルビーバインディングさえあります: Rubyのlibcurl 。結果のスクリプトは、現在のスクリプトよりもはるかに小さくなります。

他のヒント

cronから実行されるプログラムには、インタラクティブな環境がありません。したがって、それらはDISPLAY変数を持たないため、X(グラフィカル)プログラムを実行できません。 Firefox。

Firefoxを自動化するのではなく、RubyでHTTP接続を自分で行うことをお勧めします。

crontabエントリが間違っています

似ています

#min  hour  day  month  dow  user                command
55    17    *    *      *    ur_user_is_missing  ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top