Remove all `at` jobs
I know that to remove a scheduled at job I have to use atrm «numjob1 numjob2» , but is there an easy way to do that for all the jobs?
6 Answers 6
You can run this command to remove all the jobs at the atq
for i in `atq | awk ''`;do atrm $i;done
variation on this answer at -l | awk ‘
You could do something like this:
for i in $(atq | cut -f 1); do atrm $i; done
This seems to me a short line:
For more AIX 6 systems you can simply do:
Here is my xargs version that avoids braces and is hopefully intuitive:
You can also grep specific jobs by timestamp/userid and then remove them:
atq | grep "2018-10-22 16:" | cut -f 1 | xargs atrm
I had more than 58k jobs in the atd (someone rebooted the server and for some reason atd service not started). Removing the jobs using atrm is very painful for very high queue.
I stopped atd and deleted all dirs from /var/spool/atjobs and files from /var/spool/atspool . For me it worked.
rm -rf /var/spool/atjobs/* ; rm /var/spool/atspool/*
You never say anything about starting up atd again, and whether that was successful, nor do you mention what Unix this would be an adequate solution for. How did you make sure that other users’ jobs were not deleted?
Ok! Sorry! Need to start atd after the process. My solution is for «SUSE Linux Enterprise Server 12». But I think it can use in other distributions. I found the information of directories in «man». In my situation, only root is using atd, then removing the files was safe.
Команда at в Linux
at — это утилита командной строки, которая позволяет вам планировать выполнение команд в определенное время. Задания, созданные с помощью at , выполняются только один раз.
В этой статье мы расскажем , как использовать at и его компаньоны утилитами batch , atq , atrm просматривать, удалять и создавать новые рабочие места , которые должны выполняться в более позднее время.
Установка at
В зависимости от дистрибутива at может присутствовать или отсутствовать в вашей системе Linux.
Если at не установлен, вы можете легко установить его с помощью диспетчера пакетов вашего дистрибутива.
sudo apt update
sudo apt install at
После установки программы убедитесь, что atd , демон планирования запущен и настроен на запуск при загрузке:
sudo systemctl enable --now atd
Как использовать команду at
Упрощенный синтаксис команды at выглядит следующим образом:
Команда at принимает дату и время ( runtime ), когда вы хотите выполнить задание, как параметр командной строки, и команду, которая должна быть выполнена из стандартного ввода.
Создадим задание, которое будет выполнено в 9:00:
Как только вы нажмете Enter , вам будет представлена командная строка at которая чаще всего начинается с at> . Вы также увидите предупреждение о том, в какой оболочке будет выполняться команда:
warning: commands will be executed using /bin/sh at>
Введите одну или несколько команд, которые хотите выполнить:
tar -xf /home/linuxize/file.tar.gz
Когда вы закончите вводить команды, нажмите Ctrl-D чтобы выйти из подсказки и сохранить задание:
at> job 4 at Tue May 5 09:00:00 2020
Команда отобразит номер задания, время и дату выполнения.
Есть и другие способы , чтобы пройти команду , которую вы хотите запустить, помимо ввода команды в at строке. Один из способов — использовать echo и направить команду по at :
echo "command_to_be_run" | at 09:00
Другой вариант — использовать здесь документ :
at 09:00 command_to_be_run
END
Чтобы читать команды из файла вместо стандартного ввода, вызовите команду с параметром -f путь к файлу. Например, чтобы создать задание, которое будет запускать скрипт /home/linuxize/script.sh :
at 09:00 -f /home/linuxize/script.sh
По умолчанию, если команда производит вывод, at отправит электронное письмо с выводом пользователю после завершения задания. Invoke at с -M опцией для подавления уведомлений по электронной почте:
Используйте -m чтобы отправить электронное письмо, даже если нет вывода:
batch команда
batch или его псевдоним at -b планирует задания и выполняет их в пакетной очереди, если позволяет уровень загрузки системы. По умолчанию задания выполняются, когда средняя загрузка системы ниже 1,5. Значение нагрузки можно указать при вызове демона atd . Если средняя загрузка системы выше указанной, задания будут ждать в очереди.
Чтобы создать batch задание, передайте команды, которые хотите выполнить:
echo "command_to_be_run" | batch
Указание времени выполнения
Утилита at поддерживает широкий диапазон временных характеристик. Вы можете указать время, дату и приращение от текущего времени:
- Время — чтобы указать время, используйте форму HH:MM или HHMM . Чтобы указать 12-часовой формат времени, используйте am или pm после времени. Вы также можете использовать такие строки, как now , midnight , noon или teatime (16:00). По истечении указанного времени задание будет выполнено на следующий день.
- Дата — команда позволяет запланировать выполнение задания на заданную дату. Дату можно указать, используя название месяца, за которым следует день и (необязательно) год. Вы можете использовать строки, например, today , tomorrow или будний день. Дата также может быть указана в MMDD[CC]YY , MM/DD/[CC]YY , DD.MM.[CC]YY или [CC]YY-MM-DD .
- Increment — at также принимает приращения в формате now + count time-unit , где count — это число, а time-unit может быть одной из следующих строк: minutes , hours , days или weeks .
Время, дату и приращение можно комбинировать, вот несколько примеров:
- Запланируйте работу на ближайшее воскресенье на время на десять минут позже текущего:
Вы также можете указать время и дату в [[CC]YY]MMDDhhmm[.ss] используя параметр -t . Вот пример:
Указание очереди
По умолчанию задания, созданные с помощью at , планируются в очереди с именем a а задания, созданные с помощью batch , планируются в очереди b .
Запросы могут иметь имена от a до z и от A до Z Очереди с меньшими буквами работают с меньшей аккуратностью, что означает, что они имеют приоритет над очереди с более высокими буквами.
Вы можете указать очередь с помощью опции -q . Например, чтобы установить задание в L очередь, вы должны запустить:
Список незавершенных вакансий
Чтобы вывести список ожидающих заданий пользователя, выполните atq или at -l :
В выводе будут перечислены все задания, по одному в каждой строке. Каждая строка включает номер задания, дату, время, букву очереди и имя пользователя.
9 Tue May 5 12:22:00 2020 a linuxize 12 Wed Oct 21 12:30:00 2020 a linuxize 15 Tue May 5 09:00:00 2020 a linuxize 6 Tue May 5 09:00:00 2020 a linuxize 13 Mon May 4 23:08:00 2020 a linuxize 11 Wed Jul 1 10:00:00 2020 a linuxize 4 Tue May 5 09:00:00 2020 a linuxize
Когда atq вызывается от имени администратора, он перечисляет ожидающие задания всех пользователей.
Удаление незавершенных заданий
Чтобы удалить отложенное задание, atrm команду atrm или at -r после которой atrm номер задания. Например, чтобы удалить задание с номером девять, вы должны запустить:
Ограничение пользователей
/etc/at.deny и /etc/at.allow позволяют контролировать, какие пользователи могут создавать задания с помощью команды at или batch . Файлы состоят из списка имен пользователей, по одному имени пользователя в строке.
По умолчанию существует только файл /etc/at.deny и он пуст, что означает, что все пользователи могут использовать команду at . Если вы хотите отказать в разрешении определенному пользователю, добавьте имя пользователя в этот файл.
Если файл /etc/at.allow существует, только пользователи, перечисленные в этом файле, могут использовать команду at .
Если ни один из файлов не существует, только пользователи с правами администратора могут использовать команду at .
Выводы
Утилита at считывает команды со стандартного ввода и выполняет их позже. В отличие от crontab , задания, созданные с помощью at , выполняются только один раз.
Для получения дополнительной информации обо всех доступных параметрах команды at введите man at в вашем терминале.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
Linux at удалить все задания
НАЗВАНИЕ
at - планирование выполнения команд в определенное время
at время [дата] [+задержка] at -r идентификатор_задания . at -l [идентификатор_задания . ]
Если стандартный вывод и стандартный протокол не переназначены, то весь вывод запланированных команд пересылается пользователю по почте. Переменные окружения shell'а, текущий каталог, маска режима создания файлов и максимальный размер файлов [см. umask(1) и ulimit(1)] сохраняются, то есть задание выполняется в том же окружении, том же каталоге и т.д. Дескрипторы открытых файлов, прерывания и приоритет теряются.
Пользователю разрешается выполнять команду at только при условии, что его имя встречается в файле /usr/lib/ cron/at.allow. Если этого файла не существует, то проверяется файл /usr/lib/cron/at.deny, для того чтобы узнать, не запрещен ли пользователю доступ к at. Если оба файла отсутствуют, то только суперпользователю разрешено планировать выполнение задания. Если файл at.deny пуст, а at.allow отсутствует, то эти действия могут выполнять все. Файлы at.allow и at.deny содержат по одному имени в строке. Модифицировать эти файлы может только суперпользователь.
Время может быть указано 1, 2 или 4 цифрами. Если время состоит из одной или двух цифр, то оно обозначает часы; четырехзначное число обозначает часы и минуты. Время также может быть задано как два числа, разделенные двоеточием, что понимается как часы:минуты. Могут быть добавлены суффиксы am (до полудня) или pm (после полудня), в противном случае часы указываются от 0 до 23. Если необходимо указать время по Гринвичу, то можно добавить суффикс zulu. Распознаются специальные имена noon (полдень), midnight (полночь), now (сейчас), и next (следующий).
Дата может быть указана двумя способами: во-первых, в виде названия месяца, за которым следует число [и, может быть, год (через запятую)], а во-вторых, как день недели (полностью или сокращенный до 3 букв). Распознается два специальных "дня" today (сегодня) и tomorrow (завтра). Если дата не задана, то предполагается сегодняшняя дата, если указанное время больше, чем текущее, и завтрашняя, если меньше. Если заданный месяц меньше, чем текущий и год явно не задан, то предполагается, что имеется в виду следующий год.
Дополнительная задержка представляет собой просто число, за которым следует одно из следующих слов: minutes (минуты), hours (часы), days (дни), weeks (недели), months (месяцы), или years (годы). Можно указывать единицу измерения и без числа, например at now +minutes.
Далее приведены примеры корректных команд:
at 0815am Jan 16 at 8:15am Jan 16 at now +1 day at 5 pm Friday
Команда at выдает идентификатор задания и запланированное время его выполнения в стандартный протокол.
ПРИМЕР
Чтобы задание могло снова себя запланировать, следует вызвать at из shell-файла (назовем его sfile), включив в файл текст такого вида:
echo "sh sfile" | at 1900 thursday next week
ФАЙЛЫ /usr/lib/cron Основной каталог команд, связанных со временем. /usr/lib/cron/at.allow Список пользователей, которым разрешено выполнять команды at и batch. /usr/lib/cron/at.deny Список пользователей, которым запрещено выполнять команды at и batch. /usr/lib/cron/queuedefs Информация о планировании. /usr/spool/cron/atjobs Область накопления вывода.
ДИАГНОСТИКА
Сообщается о различных синтаксических ошибках и некорректном времени, а также о том, что пользователь не имеет права выполнять команду at.
СЮРПРИЗЫ
Попытка выполнить команду at now приводит к сообщению