私は毎分Firefoxを開くcrontabを作成したいと思います(単にテストするには意味がないことを知っています)。私の問題は、crontabがアクティブになっても何も起こらないということです。私のcrontabは次のようになります。
SHELL=/bin/bash
PATH=~/bin:/usr/bin:bin
* * * * * export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
なぜ動作しないのかご存知ですか?
答え1
export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
上記のcronコマンドだけを見ると、なぜ機能しないのかがわかります。このコマンドの使い方export
は
export name[=word]...
POSIXシェルの後に続く残りの単語は、export DISPLAY=:0.0
実行するコマンドではなく、環境にエクスポートする必要がある追加のシェル変数として扱われます。 POSIX(2018年7号)でも次のように規定しています。名前しなければならない
下線、数字、移植可能な文字セットの文字のみからなる単語です。
つまり、シェル変数名には同じ文字を含めることができないため、エクスポートする変数名のリストにその文字を/
含めようとすると、またはなどのメッセージでエラーが発生します。/usr/bin/firefox
not a valid identifier
bad variable name
また、xhost
コマンドが誤って使用されています。これを直接実行して、xhost
ユーザーアカウントを許可されたユーザーとして追加する必要があることを確認してください。このタスクは一度だけ実行する必要があり、cronとしてスケジュールしないでください。
プログラムがXディスプレイサーバーに接続するのを防ぐ他のメカニズムがない限り、上記の行は次のように単純に置き換えることができます。
DISPLAY=:0.0
* * * * * /usr/bin/firefox
毎分新しいFirefoxウィンドウが起動します。SHELL
環境変数も指定する必要はありません。実行可能ファイルのフルパスを指定したので、その変数firefox
も設定する必要はありませんPATH
。
また見なさい:POSIX仕様export