Mac OS X: команда не работает

42

Я собираюсь запланировать работу с помощью команды. Здесь я попробовал следующую команду:

$ at now + 1 minute
echo 'Test at command'
<EOD>

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

Я думаю, что мне может понадобиться добавить пользователя в файл at.allow. Я не могу найти at.allow в моем Mac (Snow Leopard). Не уверен, что мне нужно сделать, чтобы проверить это в команде?

David.Chu.ca
источник
Я пытался прочитать информацию от человека в. В нем упоминалось, что «Если файл _PERM_PATH / at.allow существует, разрешено использовать только те имена, которые указаны в нем, если ... Если ... at.allow не существует, проверяется _PERM_PATH / at.deny, ..» I я не уверен, что _PERM_PATH.
В случае Apple OSX Leopard PERM_PATH для «at» - это / usr / lib / cron.
Ричард Хоскинс
Для Mac OS X Lion это/var/at
Стефан Шмидт

Ответы:

40

Чтобы включить необходимый atrunдемон, как man atrunговорится, выполните:

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

как корень (например, через sudo). После того, как вы это сделаете, /var/at/появится каталог ключей (хотя самый простой способ - использовать его atкак root - например, еще раз sudo,!).

Алекс Мартелли
источник
Я знаю, что вам нужно быть пользователем root, чтобы включить демон atrun, но вам не нужно быть пользователем root для запуска команд at. (Если эти команды не требуют root.)
Ричард Хоскинс
1
эта активация или atrun переживает перезагрузки?
Эрик О Лебиго
Согласно справочной странице да, но я не пробовал.
Стефан Шмидт
1
если /var/at/at.denyпусто, вам не нужно быть пользователем root в очереди на работу, в противном случае вы можете добавить свое имя пользователя в /var/at/at.allow.
Стефан Шмидт,
Я должен сначала прочитать страницы руководства ... Спасибо!
полим
13

В Snow Leopard вам необходимо:

  1. Отредактируйте /System/Library/LaunchDaemons/com.apple.atrun.plist, измените отключенный дочерний узел с true-> false.

  2. Выгрузить ток /System/Library/LaunchDaemons/com.apple.atrun.plistс помощью:

    sudo launchctl unload -F /System/Library/LaunchDaemons/com.apple.atrun.plist
    

    Затем загрузите отредактированную версию

    sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
    
  3. Проверьте, что это работает с:

    echo blah | at now+1
    
  4. В случае сбоя эхо-кода по другой причине вы должны хотя бы увидеть, что очередь очищается с помощью:

    atq
    
Somantra
источник
1
Это единственный, который работал для меня на OSX 10.10 Yosemite.
Колин Дин
5

Я попробовал это на OS X Lion, и это, похоже, работает.

Сначала включите atrunДеймон:

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

Затем добавьте [ваше имя пользователя] в /var/at/at.allow.

После выполнения вы получите вывод на /var/mail/[your username]

Я нахожу, что поставленные в очередь элементы batchзанимают несколько минут, чтобы их фактически выполнили.

chris838
источник
2

Другие ответили о в отключенном на Mac OS X, и я не знаю об этом, но есть еще одна проблема: где вы ожидаете , что ваше эхо команды напечатать свое сообщение? В других системах Unix, которые я использовал, он не печатается в том же окне оболочки, в котором вы дали команду at . Помните, что при выполнении задания at вы можете даже не войти в систему.

Попробуйте вместо этого записать что-нибудь в файл и посмотрите, появится ли этот файл в нужное время.

Томас Падрон-Маккарти
источник
Страница man утверждает, что вывод будет отправлен вам по почте.
Стефан Шмидт
@Stefan: Да, и это хорошо работало в 1980-х годах, когда почта обрабатывалась локально на той же машине, но мой опыт (с другими типами Unix, кроме Mac OS X) заключается в том, что в настоящее время вы не должны ожидать получения почты.
Томас Падрон-Маккарти
0

Моя установка OS X (10.4) говорит в man at:

НОТА
     at, batch, atq, atrm отключены по умолчанию в Mac OS X.

Вы включили atrunпо инструкции там?

Грег Хьюгилл
источник
Я пытался найти, где находится atrun в моем Mac. Из Интернета другой вариант - добавить пользователя в at.allow. Я не мог найти этот файл (at.allow) ни.