У меня возникла проблема с отображением вывода команды в cli и перенаправлением его также в файл на моем Raspberry Pi 4 с Raspbian Buster.
Я начал sudo crontab -e
.
Вот мои основные утверждения:
0 */5 * * * sudo /home/pi/linux_scripts/block/blockips.sh > /var/log/blockips.log 2>&1 && sudo ufw status verbose > /var/log/ufw-status.log
Первая часть работает, а вторая нет из-за ошибки разрешения при записи в ufw-status.log
. Сообщение об ошибке:-bash: /var/log/blockips.log: Keine Berechtigung
Итак, я прочитал несколько тем и попробовал это:
0 */5 * * * sudo /home/pi/linux_scripts/block/blockips.sh > /var/log/blockips.log 2>&1 && sudo ufw status verbose | sudo tee /var/log/ufw-status.log
Это не работает. Файл все еще не изменен спустя несколько дней. Но если я попробую только sudo ufw status verbose | sudo tee /var/log/ufw-status.log
в командной строке (не в crontab), то это работает.
Ошибка в crontab или ошибка зависит от первого оператора?
Вы можете помочь мне?
Спасибо.
решение1
Вы использовали sudo crontab -e
, который редактирует корневой crontab. В результате вам не нужно — и не следует использовать — sudo
внутри crontab
самого файла, поскольку команды уже выполняются как root.
Таким образом, ваша команда crontab может быть упрощена до следующей:
0 */5 * * * /home/pi/linux_scripts/block/blockips.sh > /var/log/blockips.log 2>&1 && ufw status verbose > /var/log/ufw-status.log
Не рекомендуется запускать пользовательские скрипты (т. е. те, что находятся в домашнем каталоге пользователя) от имени пользователя root, но если вы единственный пользователь на машине, это допустимо. (Причина в том, что ваш обычный пользователь может изменить скрипт, чтобы он делал что угодно, и тогда root любезно запустит его для него.)
Если вы получаете ошибки, первое место, куда нужно заглянуть, это локальная электронная почта, куда cron
отправляются ее ошибки. Вы можете использовать команду mail
или mailx
(как root, так как она из root crontab), илиизменятьи просто less /var/mail/root
посмотреть необработанный почтовый файл.