Команда «at» не выполняет сценарий оболочки

Поскольку вы создаете свой собственный дистрибутив, ответственность за содержимое устанавливаемых вами файлов /etc/protocolsи /etc/servicesлежит на вас.

Органом, контролирующим назначение протокольных и служебных номеров, является IANA, как указано в заголовках файлов, которые вы цитируете; соответствующие списки доступны на их веб-сайте для номеров протоколов и имен служб и номеров портов . Однако специалисты по сопровождению дистрибутива обычно добавляют записи, которые используются, но не были отправлены в IANA или не были одобрены, и удаляют записи, которые они считают устаревшими. Для Debian источник обоих файлов находится в репозитории netbase.

POSIX определяет функции, которые можно использовать для получения информации о протоколах и службах, но не указывает, как эти данные хранятся или извлекаются, как указано в вашей цитате:

The implementation of this database is unspecified.

Информация, содержащаяся в базе данных, также не уточняется; POSIX эффективно накладывает требования только на схему.

0
11.07.2020, 14:22
1 ответ

at занимает два вида времени :фиксированный и интуитивный.

at -t 202111231735 это год 2021 месяц 11 день 23-й раз 17 :35

сейчас + 3 дня; в 07:00; в 12:00 следующего вторника делайте то, что вы ожидаете.

paul $ echo foo | at now + 3 days
warning: commands will be executed using /bin/sh
job 16 at Tue Jul 14 16:55:00 2020
paul $ date
Sat 11 Jul 16:56:02 BST 2020
paul $ echo foo | at 0700
warning: commands will be executed using /bin/sh
job 17 at Sun Jul 12 07:00:00 2020
paul $ echo foo | at 1200 next tuesday
warning: commands will be executed using /bin/sh
job 18 at Tue Jul 14 12:00:00 2020
paul $ atq
18  Tue Jul 14 12:00:00 2020 a paul
17  Sun Jul 12 07:00:00 2020 a paul
16  Tue Jul 14 16:55:00 2020 a paul
paul $

Ваши обратные -команды с галочкой совершенно неверны :они будут выполнять ваш сценарий прямо сейчас и вставлять свой фактический стандартный вывод в предстоящее задание. Поскольку вы перенаправляете весь вывод в момент создания задания, задание, которое оно устанавливает, на самом деле пусто --, в него не помещается стандартный вывод.

Чтение множества команд в at тоже некорректно. Они будут запускаться /bin/sh, а не оболочкой в ​​любом шебанге, который у вас может быть. Если вам действительно необходимо иметь несколько строк команд, используйте HereDoc и очень внимательно относитесь к тому, происходит ли расширение оболочки при создании задания или при его окончательном запуске.

Просто повторите имя скрипта (и любые аргументы )в at. Затем оболочка увидит шебанг и запустит правильную оболочку. Кроме того, любые исправления, которые вы вносите в сценарий, будут эффективными, потому что at еще не прочитал настоящий сценарий. Вам даже не нужен путь, потому что по желанию можно восстановить ваш cwd и вашу среду, прежде чем он выполнит ваш скрипт.

Интуитивное определение времени для даты задокументировано (на моем Монетном дворе )по адресу /usr/share/doc/at/timespec. Это в форме грамматики Баха -Наура, так что это не очень удобно. Использование at 07101805приводит к неопределенному токену concatenated_date, который, по-видимому, предполагает MMDDCCYYдля CC >= 1900, текущий век для CC == 00 и относительно 1900 для CC в {01..18}.

Просмотр сохраненных заданий, таких как:

paul $ at -c 18
#!/bin/sh
# atrun uid=1000 gid=1000
# mail paul 0
umask 22
XDG_VTNR=8; export XDG_VTNR
... 50 lies of setup.
COLORTERM=mate-terminal; export COLORTERM
XAUTHORITY=/home/paul/.Xauthority; export XAUTHORITY
cd /home/paul || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
foo
3
18.03.2021, 23:20

Теги

Похожие вопросы