У меня есть этот набор cronjob:
* * * * * /usr/bin/systemctl suspend
И это не работает. Но я могу запустить его в оболочке, и он работает. Я не понимаю, что может не работать.
РЕДАКТИРОВАТЬ
Перенаправление вывода ошибок, чтобы получить /tmp/error
это:
Failed to issue method call: Access denied
Failed to issue method call: Access denied
Мой вопрос: запускаются ли cronjobs как специальный пользователь ( cron
например), что объясняет, что мой пользователь может запускать команду, но не cron
сам?
Дополнительное объяснение:
Это минимальный пример, показывающий проблему, с которой я сталкиваюсь в сценарии (это имеет больше смысла, чем приведенная здесь одна команда)
systemctl
является частьюsystemd
. Я думаю, перезагрузка, завершение работы, приостановка работы с пользователем без полномочий rootsystemd
. Во всяком случае, это работает на моей системе.Наконец, я использую Arch Linux и
/bin
,/usr/sbin
,/sbin
все символические ссылки на/usr/bin
.
systemctl
есть,/usr/bin
и он так принимаетsuspend
? Какой * nix вы используете?systemctl suspend
не работает на дистрибутивах Debian или RedHat) и поэтому объясняет, что вы на самом деле не хотите делать то, что вы показываете :). Кроме того, попробуйте добавить2> /tmp/error
или что-нибудь, чтобы зафиксировать любые ошибки, которые вы можете получить. Наконец, сообщите нам, какой пользователь запускает этот crontab.Ответы:
Я не могу ответить как таковой, но я думаю, что могу указать вам правильное направление. Я нашел это в Arch Wiki страницы из
systemd
:Это предлагает мне следующие возможности:
Вы вошли в систему другого пользователя. Возможно, вы вошли через tty?
cron
запускает свои команды, используя/bin/sh
. По умолчанию в Arch это символическая ссылка на/bin/bash
. Это будет означать, чтоcron
запускается неинтерактивная оболочка bash, которая затем обнаруживает, что запущен другой пользовательский сеанс (ваш), поэтому он не имеет права на запуск,systemctl
несмотря на то, что он работает как ваш пользователь.Итак, если ваша проблема в том, что вам
cron
не разрешено работать,systemctl
потому что вы уже вошли в систему, вы можете обойти это, играя с polkit, но у меня нет опыта, поэтому я не могу помочь.источник
w
иuptime
из скриптов, запускаемых cron. Их выводы указывают на то, что был только пользователь. Значит ли это, что есть другая проблема?Простой обходной путь - использовать crontab root вместо вашего собственного. Отредактируйте его с помощью:
вместо того:
источник
Цитирую отсюда :
источник
Если вы используете системный crontab, то вы забыли поле пользователя. Пытаться:
источник
/etc/crontab
, это crontab, который вы создалиcron -e
как обычный пользователь?crontab -e
как обычный пользователь.systemctl suspend
без sudo.Вам нужно использовать конфигурационный файл systemd в
/etc/systemd/system
источник