Я хочу написать crontab, который открывает Firefox каждую минуту (просто для проверки, я знаю, что это не имеет смысла). Моя проблема в том, что даже если 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 (выпуск 7, издание 2018 г.) также определяет, чтоимядолжно быть
слово, состоящее исключительно из символов подчеркивания, цифр и букв алфавита из переносимого набора символов.
Это означает, что имена переменных оболочки не могут содержать такие символы, /
поэтому попытка включить их /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