2016-07-15 12 views
2

私はcrontabを初めて使用しています。単純なcronジョブを取得しようとしています。 1分ごとにF5キーを押してMozzila Firefoxを更新したい。私はプレスF5にxdotoolを使用しています。Cron xdotoolが実行されない

#!/bin/bash 
xdotool search --name "Mozilla Firefox" key F5 

私は、コマンドラインで実行した場合、それが正常に動作します: 私はスクリプト/usr/local/bin/refresh.shを持っています。そして許可:

-rwxr-xr-x. 1 root root 89 15. čec 10.32 refresh.sh 

のcrontab では、私が持っている:

*/1 * * * * cd /usr/local/bin && sh refresh.sh 

しかし、スクリプトはcronのdoesntの仕事で実行されます。 誰かが私が間違っていることを教えてもらえますか?

+0

'DISPLAY'変数を渡す必要がありますか?ログに何かがありますか? – kenorb

+0

ええ、忘れてしまったところDisplay:0、thx – Tomas

答えて

3

xdotoolコマンドがありますキーボード/マウス入力をシミュレートできるX11の自動化ツールですが、crontabはrです独立していない場合は、使用するX Window Systemディスプレイサーバーを指定するために変数DISPLAYを定義する必要があります。通常、デスクトップにログインすると、この変数は自動的に割り当てられますが、特に、rootアカウントを介してコマンドを実行した場合、crontabは隔離された環境でジョブを実行しています(ttyも関連付けられていません)。

だから、要するに、あなたは次のように自分の仕事を定義し実行する必要があります。

*/1 * * * * DISPLAY=:0 /usr/local/bin/refresh.sh 

それとも、(いるVixieのcronの場合)、ファイルの先頭で変数を定義することができます。参照:Variables in crontab?

また、ジョブを実行しているユーザーが、選択したXディスプレイへのアクセスを許可していることを確認してください。アクセスを許可する必要がある場合は、xhostsetfaclコマンドで許可を割り当て、さらにXAUTHORITY変数を指定する必要があります。詳細はXdotool using “DISPLAY=:0”を参照してください。

0

なぜ

*/1 * * * * /usr/local/bin/refresh.sh 

cd /usr/local/binあなたは、以下のシナリオでcdを必要とするあなたは/usr/local/bin

でcronジョブを実行していないとして、ここでは必要ありません

*/1 * * * * cd /usr/local/bin && ls >/var/somelog # wish to execute ls in a particular directory 
+0

あなたは正しいです、refresh.shの出力のために "/ usr/local/bin"に "test.log"を持っています – Tomas

+0

@Tomas – sjsam

+0

はい、それは私のために働く – Tomas

関連する問題