У меня проблема с командой Linux «at», и Google довольно сложно с 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
Relja Arandjelović
После того, как @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
maiki
Добавьте свое имя пользователя /etc/at.allow(создайте его, если оно не существует)
Согласно справочной странице:
если /etc/at.allowсуществует, упомянутые пользователи имеют доступ кat
в противном случае /etc/at.denyвсе пользователи имеют доступ, atкроме тех, которые указаны в файле.
иначе только root имеет доступ к at
Файл не существует, я создал его и добавил к нему свое имя пользователя. Мой пользователь отсутствует в /etc/at.deny. Это не сработало, без изменений. Фактически, если бы мне не разрешили использовать «at», тогда об этом было бы сообщено в начале (например, для «fun» я попытался добавить свое имя в /etc/at.deny и при попытке запустить «at» я бы получил «У вас нет разрешения на использование в.»)
Relja Arandjelović 9 лет назад
0
@ user1939941 В своем вопросе вы говорите о `смонтированном через NAS`. Это монтирование NFS? `at` отправляет ошибку по почте пользователю, который ее вызывает. Вы получили что-нибудь? Если вы удалите `> / local / USER / tmp.txt` из вашего скрипта, это сработает?
maiki 9 лет назад
0
Не уверен, как проверить, если это монтирование NFS, но я думаю, что это так. Я не получаю никакой почты от «at», но я также заметил некоторые проблемы с «mail», которые я пытаюсь разрешить (я могу отправлять почту USER из root, но не в root от USER, хотя я могу отправить себе (от ПОЛЬЗОВАТЕЛЯ к ПОЛЬЗОВАТЕЛЮ), не уверен, что он подключен. Удаление `> / local / USER / tmp.txt` не имеет никакого значения, и я не ожидал бы этого, так как и ПОЛЬЗОВАТЕЛЬ и root имеет доступ для записи туда (я проверил и запустил скрипт вручную без 'at')
Relja Arandjelović 9 лет назад
0
@ user1939941 запустите `at -f /local/USER/tmp.sh now` и проверьте последние строки` / var / log / messages` и `/ var / log / secure`
maiki 9 лет назад
1
Спасибо, это привело меня в правильное русло, и я решил его сейчас! Скоро выложу решение в виде отдельного ответа. Кстати, для Ubuntu 12.04 эти журналы находятся в разных местах: / var / log / syslog и /var/log/auth.log (?)
Relja Arandjelović 9 лет назад
0
@ user1939941 рад, что это помогло
maiki 9 лет назад
0