Вы можете использовать Sed Command Piberielined для GREP
grep "sda" |sed -n '2'p
, если его вторая строка делает это еще, обеспечивает определенный номер строки
Ваша первая проблема заключается в том, что Вы используете неправильный синтаксис для выполнения задания каждую минуту:
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" каждую минуту.
Я уверен, что мне не нужна вся моя интерактивная среда, чтобы это работало, но я не знаю точно, какие переменные окружения нужны или какими должны быть их значения. Очень вероятно, что некоторые из необходимых переменных будут установлены при запуске текущего сеанса входа в систему, и что они изменятся, если я выйду и снова войду в систему. Также очень вероятно, что подробности будут меняться в зависимости от того, какое окружение рабочего стола вы используете.
Это не полное решение, но оно должно дать вам начальную точку -- и, возможно, кто-нибудь другой сможет добавить соответствующие подробности.
Ваш 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
.
$ crontab -l
*/1 * * * * /usr/bin/notify-send -t 0 "hello"
Попробуйте это, если вы хотите запустить вашу CRON
каждую минуту.