Cron xdotool не запускается

Я новичок в использовании crontab, и я пытался получить простую работу cron. Я хочу нажимать F5 каждую минуту, чтобы обновлять Mozzila Firefox. Я использую xdotool для нажатия F5. У меня есть скрипт /usr/local/bin/refresh.sh:

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

Если я запускаю его в командной строке, он работает нормально. И разрешение:

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

В crontab у меня есть:

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

Но скрипт, запущенный cron, не работает. Кто-нибудь может сказать мне, что я делаю не так?


person Tomas    schedule 15.07.2016    source источник
comment
Вам нужно передать какую-либо DISPLAY переменную? В логах что-нибудь есть?   -  person kenorb    schedule 15.07.2016
comment
Да, я забыл поставить Display =: 0, спасибо   -  person Tomas    schedule 16.07.2016


Ответы (6)


Команда xdotool - это инструмент автоматизации для X11, который позволяет имитировать клавиатуру. / mouse input, но поскольку crontab запускается независимо, необходимо определить переменную DISPLAY, чтобы указать, какой сервер отображения системы X Window использовать. Обычно, когда вы входите в систему на рабочем столе, эта переменная назначается автоматически, но crontab выполняет задания в изолированной среде (не имеет даже связанного tty), особенно когда вы запускаете команды через учетную запись root.

Короче говоря, вы должны определить свою работу следующим образом:

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

Или вы можете определить переменные в начале файла (в случае Vixie cron). См .: Переменные в crontab?

Также убедитесь, что пользователь, выполняющий задание, предоставил доступ к выбранному X-дисплею. Если вам нужно предоставить доступ, вам необходимо назначить разрешение с помощью команд xhost и setfacl и указать дополнительную переменную XAUTHORITY, см .: Xdotool используя «DISPLAY =: 0» для получения более подробной информации.

person kenorb    schedule 16.07.2016

Итак, я попробовал кучу вещей, но по какой-то причине в Ubuntu 18.04 echo $display вернул :1, а не :0. Кроме того, единственный установщик переменных среды, который, казалось, работал, добавлял:

export DISPLAY=":1"

непосредственно в скрипт, в котором запущен cron.

person Parth Mehrotra    schedule 29.12.2018

Почему нет

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

cd /usr/local/bin здесь не требуется, поскольку вы не выполняете задание cron в /usr/local/bin

Вам понадобится cd в сценарии ниже

*/1 * * * * cd /usr/local/bin && ls >/var/somelog # wish to execute ls in a particular directory
person sjsam    schedule 15.07.2016
comment
вы имеете право, у меня есть test.log в / usr / local / bin для вывода refresh.sh - person Tomas; 16.07.2016

Во-первых, как сказал Парт, обязательно наберите echo $ DISPLAY на терминале и получите результат (для меня это было: 10.0 по какой-то причине). Затем внутри скрипта, который вы вызываете из cron, перед вызовом xdotool напишите следующее:

export DISPLAY=:10.0 

#instead of :10.0 write your own output from before

export XAUTHORITY=/root/.Xauthority  

#if you are not a root user, instead of /root/.Xauthority write ~/.Xauthority
person aris melachroinos    schedule 30.01.2020

Если кто-то хочет запланировать команды xdotool с помощью другого инструмента, это возможно с помощью команды At (см. учебник). Итак, чтобы работать, вы должны определить переменную среды DISPLAY (как объяснил Kenorb). Сначала я получил текущее значение из этой переменной (echo $ DISPLAY), чтобы установить в моем файле сценария (export DISPLAY =: 0). Затем его можно запустить так:

at xx:xx -f your_shell_script_file
person Paulo Ricardo    schedule 22.06.2021

ты можешь попробовать это

* / 1 * * * * ДИСПЛЕЙ =: 0 /usr/local/bin/refresh.sh

person Kısa Animasyon    schedule 22.06.2021