atd перестал работать на OS X 10.10.3

Я использую OS X Yosemite, только что обновленную до 10.10.3, и команда at и связанные с ней (atq, atrm и т. д.) перестали работать. Был ли atd отключен в последней версии 10.10.3? Если да, то как мне исследовать и повторно активировать необходимые разрешения?

~$ atq
atq: cannot regain privs: Operation not permitted

В качестве фона у меня есть задание, которое выполняется ежедневно (используя launchd) и отправляет список заданий в atd. Список заданий связан с событиями, происходящими в этот день, поэтому время их выполнения меняется ежедневно. Поэтому я использую atd для запуска этих заданий на основе времени ежедневных событий.

Он работал нормально до недавнего обновления до 10.10.3.

/usr/libexec/atrunвключен и работает нормально, согласно launchd.

Похоже на ошибку (могу воспроизвести на нескольких машинах)
Это ошибка... или "функция безопасности"?
Опять же Linux/UNIX 'at' предназначен для отправки фонового задания, работающего от имени отправляющего пользователя. Бинарный файл /usr/bin/at является корневым SUID!

Ответы (2)

Это сообщение говорит о том, что у вас нет необходимых прав для запуска atq. Попробуйте запустить его с помощью sudo из командной строки, чтобы увидеть, поможет ли это, например:

> atq
atq: cannot regain privs: Operation not permitted
> sudo atq
Password:
>
Да, это работает с помощью sudo. Однако я отправляю задания из сценария bash, поэтому я не могу использовать sudo, поскольку не могу предоставить пароль из сценария. Я не понимаю, почему у меня сейчас нет разрешений. До обновления работало. /var/at/at.deny пуст, и я добавил /var/at/at.allow с моим именем пользователя. Однако это не работает.
Вы можете запустить родительский скрипт с помощью sudo, если вы запускаете его вручную, или вы можете запустить его как root через cron. Apple время от времени обновляет разрешения, необходимые для запуска некоторых инструментов командной строки. Например, xcodebuild изначально был доступен пользователям, но затем в одном обновлении Xcode флаг --switch начал требовать sudo.
Команда «at» — это SUID для root, и на самом деле НЕ должны требоваться привилегии root, ЕСЛИ вы не отправляете задание at для запуска от имени root, а не от конкретного пользователя.
@mdpc Я согласен, и раньше это работало нормально до обновления 10.10.3. Теперь я не могу запустить его как свою обычную учетную запись пользователя, хотя я добавил ее в at.allow, а в at.deny ее нет. Я не вижу ничего плохого в моей настройке (раньше она работала нормально).
Я поэкспериментировал с этим еще немного, и я обнаружил, что в корне все, что просто делается, это просто помещать задание в очередь «задания», где оно в основном остается навсегда. Таким образом, вы можете сделать «at», и задание действительно будет создано, просто НИКОГДА не запускайте (OSX 10.10.3).

Я только что установил обновление 10.10.4 от Apple сегодня.

Я заметил, что команда at работает. Но это еще не все, что вам нужно сделать, чтобы включить службу. Что вам нужно сделать, так это отредактировать /System/Library/LaunchDaemons/com.apple.atrun.plist и изменить «true» на «false» после отключенного раздела XML. Затем вы можете использовать команду

 launchctl load /System/Library/LaunchDaemons/com.apple.atrun.plist

чтобы запустить его.