Firefox を 1 分ごとに開く 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
単独で実行して、ユーザー アカウントを許可されたユーザーとして追加する必要があるかどうかを確認します。これは 1 回だけ実行すればよく、cron でスケジュールする必要はありません。
プログラムが X ディスプレイ サーバーに接続するのを妨げる他のメカニズムがない限り、上記の行は次のように置き換えることができます。
DISPLAY=:0.0
* * * * * /usr/bin/firefox
これにより、1 分ごとに新しい Firefox ウィンドウが起動します。環境変数を指定する必要もありませんSHELL
。また、実行可能ファイルのフル パスを指定しているためfirefox
、変数を設定する必要もありませんPATH
。