문제

Firefox에서 Dlink Admin 페이지를 열고 ADSL 연결 또는 단절을 수행하는 Ruby 스크립트를 작성했습니다.

문제 없이이 스크립트를 터미널에서 실행할 수 있습니다. 그러나 내가 Cron 작업으로 넣으면 Firefox를 발사하지 않습니다.

이것은 내가 가진 항목입니다 크론타 브

# 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- 서버를 가리키는 디스플레이 환경이 있어야합니다. 여기에는 ": 0.0"(따옴표없이) 값으로 설정하여 로컬 표준 디스플레이를 참조 할 수 있습니다.

그러나 명심해야 할 몇 가지 사항이 있습니다. X Virtual Frame Buffer (XVFB)를 실행할 수 있으므로 Firefox가 단순히 디스플레이로 사용합니다. 이는 Firefox가 모든 그래픽 작업을 수행 할 수 있지만 표준 그래픽 환경과 무관하다는 것을 의미합니다. XVFB 인스턴스를 가리킬 수 있도록 디스플레이 변수를 적절하게 설정해야합니다. 예를 들어, XVFB를 다음과 같이 호출하는 경우 :

Xvfb :1 -screen 0 1600x1200x32

그런 다음 디스플레이 변수를 다음과 같이 설정하여 이것을 사용할 수 있습니다.

모뎀을 단순히 연결하거나 분리하기 위해 본격적인 Firefox 인스턴스를 시작합니다. "CURL"을 사용하여 적절한 HTTP 요청을 서버로 보내서 연결 또는 연결을 끊을 수 있습니다. 재생산해야 할 것을 사소하게 볼 수있는 한 가지 방법은 LiveHttPheaders와 같은 Firefox 플러그인을 설치하고 수동으로 작업을 수행 할 때 가장 중요한 HTTP 요청을 기록하는 것입니다.

컬에 대한 루비 바인딩도 있습니다.루비를위한 libcurl. 결과 스크립트는 현재 스크립트보다 훨씬 작아야합니다.

다른 팁

CRON에서 실행되는 프로그램에는 대화식 환경이 없습니다. 따라서 변수가없고 표시되지 않으므로 Firefox와 같은 X (그래픽) 프로그램을 실행할 수 없습니다.

나는 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