1

У меня проблема с командой Linux 'at', и это довольно сложно для Google 'at' .. Проблема в том, что что бы я ни бегал, это никогда не останавливается.

например, вот простой скрипт, который я сделал (я заменил свое имя пользователя на USER):

#!/bin/bash
echo "Testing" > /local/USER/tmp.txt

Я поместил вышеупомянутые строки в файл /local/USER/tmp.sh и сделал файл исполняемым. Запуск с

/local/rarandje/tmp.sh

работает как положено и создает соответствующий файл.

Теперь, если я попробую с командой 'at':

at -f /local/USER/tmp.sh now + 1 min

он начинает выполняться в нужное время, но просто зависает, это вывод команды -l:

10      Wed Jan 21 15:06:00 2015 = USER
10      Wed Jan 21 15:06:00 2015 a USER

Выходной файл tmp.txt не создается, в списке процессов нет команды 'echo' или 'tmp.sh', поэтому я не совсем понимаю, в чем проблема и как ее отладить.

Стоит отметить одну вещь, которая может иметь значение, хотя она также может быть совершенно неактуальной и отвлекать вас: у пользователя root нет прав на мою домашнюю папку (я работаю в компании, которая хранит домашние папки в сети и монтируется через NAS таким образом, локальный пользователь root на моей машине фактически не имеет прав даже на чтение смонтированной папки ~, поскольку локальный корень не совпадает с удаленным корнем). Однако root определенно имеет доступ на чтение / запись к / local / USER /, так как это всего лишь локальный диск. Не уверен, имеет ли это какое-либо отношение, например, может быть, есть что-то в начале команды 'at', которая выполняется root и должна прочитать мой профиль bash или что-то еще, но это все равно не имеет смысла, я бы сказал, меньше всего ожидайте, что работа провалится и не будет постоянно "работать".

Я на Ubuntu 12.04.4 и имею (локальный) доступ с правами root. Заранее спасибо.

РЕДАКТИРОВАТЬ: Я только что попробовал то же самое, что и root, то есть просто запустил ту же команду «at», что и пользователь root, и все работает нормально, выходной файл создан, и задание завершается.

2 ответа2

2

После того, как @maiki опубликовал этот комментарий, я посмотрел на /var/log/syslog и увидел эту ошибку (я анонимизировал ее с помощью HOSTNAME и USERID):

Jan 21 17:53:32 HOSTNAME atd[27285]: Userid USERID not found - aborting job       14 (a0000e016998f5)

Немного погуглив, я обнаружил этот пост, в котором в основном говорится, что atd должен запускаться после ypbinding при запуске компьютера, если есть какие-либо нелокальные пользователи (я не эксперт в настройке компьютера, у меня есть сеть имя пользователя, которое я использую для подключения к своему компьютеру, и каждый из моей компании может подключиться таким же образом к моему компьютеру). Я только что перезапустил atd с помощью sudo service atd restart и теперь мои "at" задания работают нормально. Не уверен, как это исправить навсегда, чтобы мне не приходилось перезапускать atd каждый раз, когда я перезагружал компьютер, но я постараюсь выяснить это (и отредактировать этот ответ)

0

Добавьте ваше имя пользователя в /etc/at.allow (создайте его, если оно не существует)

Согласно справочной странице:

  • если /etc/at.allow существует, пользователи , упомянутые имеют доступ к at
  • В противном случае, если /etc/at.deny существует, все пользователи имеют доступ к at кроме тех, которые указаны в файле.
  • еще только корень имеет доступ к at

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .