firefoxが開かない-cron、ruby、firewatir
-
02-07-2019 - |
質問
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