Вопрос или проблема
Я знаю, что могу увидеть расписание с помощью atq
, но это показывает мне только дату и время выполнения и не указывает, какая команда будет выполнена.
[root@myserver ~]# atq
1Thu Oct 31 04:45:00 2024 a root
Используя at -c 1
, я получаю всю работу и много конфигураций (на данный момент для меня это просто мусор). Есть ли способ увидеть только чистую команду, которая будет выполнена?
Выполняя команду:
at -c 1|grep -ve '^[A-Z]'
вы получите команды, которые будут выполнены. Это также покажет дополнительные команды, но уберет длинный список переменных.
Ответ или решение
Чтобы просмотреть содержимое задания в очереди команд at
и выявить конкретную команду, которая будет выполнена, вы можете использовать несколько утилит Linux, чтобы отфильтровать вывод и показать только нужную информацию. Давайте разберем процесс по шагам.
1. Просмотр очереди задач
Для начала вы можете использовать команду atq
, чтобы получить список запланированных задач:
atq
Вывод может выглядеть следующим образом:
1 Thu Oct 31 04:45:00 2024 a root
Как видно, эта команда возвращает только время выполнения задачи и пользователя, который её запланировал, но не указывает команду, которая будет выполнена.
2. Получение содержимого задачи
Чтобы увидеть содержимое задачи, используйте команду at -c
, передав ID задания, полученный с помощью atq
. Для первого задания (ID 1) команда будет:
at -c 1
Однако, как вы уже заметили, данный вывод содержит не только саму команду, но и множество переменных и конфигурационных строк, которые могут путать. Это выглядит так:
#!/bin/sh
# atrun uid=0 gid=0
# jobs allow
...
# команде, которую хотите увидеть
echo "Привет, мир"
3. Фильтрация вывода
Чтобы получить только саму команду, исключив все строки с метаданными и комментариями, вы можете воспользоваться командой grep
. Ваша команда может выглядеть следующим образом:
at -c 1 | grep -ve '^[A-Z]'
Эта команда отфильтрует строки, начинающиеся с заглавных букв, и выдаст вывод, который вам нужен, а именно:
echo "Привет, мир"
4. Лучшая фильтрация
Чтобы улучшить фильтрацию, можно использовать более сложные регулярные выражения или дополнительные команды, чтобы исключить пустые строки или строки, содержащие только комментарии. Например:
at -c 1 | grep -v '^[[:space:]]*#' | grep -ve '^[A-Z]' | sed '/^[[:space:]]*$/d'
Эта команда уберет:
- строки, начинающиеся с
#
(комментарии), - строки, начинающиеся с заглавных букв,
- пустые строки.
Заключение
Теперь вы умеете просматривать запланированные задачи в at
, извлекать их содержимое и отфильтровывать ненужные данные. Данные команды помогут вам эффективно управлять заданиями и быть в курсе, какие задачи запланированы для выполнения. Если у вас есть дополнительные вопросы, не стесняйтесь их задавать!