Мое задание крона не работает

Вы можете использовать Sed Command Piberielined для GREP

grep "sda" |sed -n '2'p

, если его вторая строка делает это еще, обеспечивает определенный номер строки

0
22.04.2015, 01:54
3 ответа

Ваша первая проблема заключается в том, что Вы используете неправильный синтаксис для выполнения задания каждую минуту:

1 * * * * /usr/bin/notify-send -t 0 "hello"

1 в первом поле означает, что задание выполняется только через 1 минуту после каждого часа. Измените его с 1 на *:

* * * * * /usr/bin/notify-send -t 0 "hello"

Вторая проблема заключается в том, что задания cron выполняются в очень ограниченном окружении. В моей системе (Linux Mint), единственными переменными окружения, которые установлены, являются $HOME, $LOGNAME, $PATH, $LANG, $SHELL и $PWD -- и $PATH обычно устанавливается на "/usr/bin/: /bin".

Как минимум, отсутствие настройки для $DISPLAY означает, что notify-send ничего не может отобразить.

Быстрый эксперимент с:

* * * * * DISPLAY=:0.0 notify-send "hello from crontab"

привел к следующей ошибке:

(notify-send:18831): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed

(Я запускаю рабочий стол Gnome.)

В другом эксперименте я скопировал все свое интерактивное окружение в скрипт, затем отредактировал скрипт так, чтобы он явно задал все переменные окружения и вызвал notify-send. На самом деле это работает; теперь я получаю всплывающее сообщение "привет от crontab" каждую минуту.

Я уверен, что мне не нужна вся моя интерактивная среда, чтобы это работало, но я не знаю точно, какие переменные окружения нужны или какими должны быть их значения. Очень вероятно, что некоторые из необходимых переменных будут установлены при запуске текущего сеанса входа в систему, и что они изменятся, если я выйду и снова войду в систему. Также очень вероятно, что подробности будут меняться в зависимости от того, какое окружение рабочего стола вы используете.

Это не полное решение, но оно должно дать вам начальную точку -- и, возможно, кто-нибудь другой сможет добавить соответствующие подробности.

2
28.01.2020, 02:28

Ваш CRON работа почти наверняка работает. Тем не менее, вы не можете (легко) взаимодействовать с вашим графическим интерфейсом CRON , поэтому, к сожалению Уведомление-Отправить .

Вы можете доказать, работает ли ваша работа CRON , изменяя строку CRONTAB следующим образом

1 * * * * ( date; notify-send /usr/bin/notify-send -t 0 "hello"; echo ) >>cron.log 2>&1

Это напишет дату и любой выход из уведомления - команда в файл журнала под названием CRON.LOG в домашнем каталоге.

Обратите внимание, однако, что, как копируется с вашего вопроса, это будет работать только на первой минуте каждого часа ( 1 * * * * ). Чтобы запускать каждую минуту, вам нужно использовать * * * * * («Каждую минуту» вместо «1-й минуты»). Кедос для @keiththompson за то, что указывает на это.

Гранулярность Cron составляет одну минуту. Если вам нужно провести работу чаще, чем это, вы можете рассмотреть свой автономный демон, либо две строки в Cron , один из которых предшествует сон 30 .

1
28.01.2020, 02:28
$ crontab -l
*/1 * * * * /usr/bin/notify-send -t 0 "hello"

Попробуйте это, если вы хотите запустить вашу CRON каждую минуту.

0
28.01.2020, 02:28

Теги

Похожие вопросы