Я написал небольшой PHP-скрипт, чтобы обернуть at
команда в Ubuntu. Теперь мне нужно запустить тот же код на сервере Redhat. Конечно, результат при добавлении и перечислении вакансий будет другим.
Ubuntu (at -V
= 3.1.11): job 4 at Fri Nov 12 13:41:00 2010
Красная Шапка (at -V
= 3.1.8): job 14 at 2010-11-12 13:42
Есть ли способ изменить вывод at
команду сделать его более однородным? я прочитал man at
и я ничего там не вижу, но, возможно, я пропустил какой-то хитрый путь.
Я использую регулярное выражение для «чтения» вывода, чтобы я мог обновить его для поддержки формата Redhat, но что произойдет, если то же самое будет запущено в другом дистрибутиве.
Вы можете нормализовать даты, используя что-то вроде:
date -d "$date" --rfc-3339=seconds
Я собирался предложить следующее, но at
похоже, игнорирует переменные среды локали:
LC_TIME=C at -v ... # has no effect
Я вижу, что строки различаются форматом даты / времени. Вы можете разделить вывод на две подстроки (задание 4 в) и часть даты / времени. Затем вы можете проанализировать дату с помощью функции strtotime
.
В конце вы можете объединить первую часть с проанализированной датой / временем. Итак, вы получаете единообразный выход. Кроме того, вы можете преобразовать часть даты / времени в желаемый формат.
Я обнаружил, что с помощью at
с -v
flag дает одинаковый формат вывода даты как в Ubuntu, так и в Redhat. Но вывод выглядит следующим образом:
Ubuntu
Fri Nov 12 13:41:00 2010
warning: commands will be executed using /bin/sh
job 4 at Fri Nov 12 13:41:00 2010
Красная Шапка
Fri Nov 12 13:42:00 2010
job 14 at 2010-11-12 13:42
Это позволит мне получить дату из первой строки, а затем номер задания из последней строки.
Это нормально при добавлении вакансий, но при перечислении вакансий в очереди -v
не будет работать и формат даты все равно будет другим. Думаю, пришло время для другого программного обеспечения для очередей.