我想寫一個每分鐘打開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 shell 中,後面的其餘單字export DISPLAY=:0.0
將被視為應導出到環境的其他 shell 變量,而不是要執行的命令。 POSIX(2018 年版第 7 期)也規定姓名應該
僅由可移植字元集中的底線、數字和字母組成的單字。
這意味著 shell 變數名稱不能包含諸如 之類的字符,/
因此嘗試將其包含/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