Может ли один пользователь иметь несколько файлов crontab?

Здесь есть два мировоззрения:

  • Что касается программ, использующих termcap / terminfo, ваш терминал потенциально имеет два режима: режим адресации курсора и режим прокрутки . Последний является нормальным режимом, и программа переключается в режим адресации курсора, когда ей нужно перемещать курсор по экрану по адресам строки и столбца, рассматривая экран как двумерный объект.

    termcap и terminfo переводят это мировоззрение, которое видят программы, в мировоззрение, которое видят терминалы.

  • Что касается терминала (эмулируемого или реального), существует два экранных буфера, только один из которых отображается в любой момент. Есть первичный экранный буфер и альтернативный экранный буфер . Управляющие последовательности, генерируемые программами, переключают терминал между двумя терминалами.
    • Для некоторых терминалов, обычно эмулируемых, альтернативный экранный буфер адаптирован к использованию termcap / terminfo. Они разработаны с учетом того, что часть переключения в режим адресации курсора переключается на буфер альтернативного экрана, а часть переключения в режим прокрутки переключается на буфер основного экрана. Вот как переводят вещи termcap / terminfo. Таким образом, эти терминалы не показывают виджеты пользовательского интерфейса с прокруткой, когда отображается альтернативный экранный буфер, и просто не имеют механизма обратной прокрутки для этого экранного буфера.
    • Для других терминалов, обычно реальных, альтернативный экранный буфер очень похож на основной. Оба в значительной степени идентичны с точки зрения того, что они поддерживают.Обратите внимание, что несколько эмулированных терминалов попадают в этот класс. Например, Unicode rxvt поддерживает прокрутку как для основного, так и для альтернативного экранных буферов.

Программы, представляющие полноэкранные текстовые пользовательские интерфейсы (например, vim , nano , less , mc и т. Д.) Используйте termcap / terminfo для переключения в режим адресации курсора при запуске и обратно в режим прокрутки, когда они приостанавливают работу, завершают оболочку или выходят из нее. Библиотека ncurses делает это, но то же самое делает и программы, не использующие ncurses, которые строятся непосредственно поверх termcap / terminfo.

Прокрутка внутри TUI, представленная less или vim , не имеет ничего общего с прокруткой назад. Это реализовано внутри этих программ, которые просто перерисовывают свой полноэкранный текстовый пользовательский интерфейс по мере необходимости.

Обратите внимание, что эти программы не «не оставляют содержимого» в альтернативном экранном буфере. Терминал просто больше не отображает то, что они оставили.

  • Это особенно заметно с Unicode rxvt на некоторых платформах, где последовательности termcap / terminfo для переключения в режим адресации курсора неявно не очищают альтернативный экранный буфер. Таким образом, последовательное использование нескольких таких полноэкранных программ TUI может привести к отображению старого содержимого альтернативного экранного буфера, оставленного последней программой, по крайней мере, на некоторое время, пока новая программа не запишет свой вывод (наиболее заметно, когда ] less находится в конце конвейера).
  • С помощью xterm можно переключиться на отображение альтернативного экранного буфера из меню графического интерфейса эмулятора терминала и увидеть, что содержимое все еще там.

Фактические управляющие последовательности - это то, что соответствующие стандарты называют последовательностями управления установкой частного режима . Соответствующие номера частного режима - 47, 1047, 1048 и 1049. Обратите внимание на различия в том, какие дополнительные действия подразумеваются каждым из них, помимо переключения в / из альтернативного экранного буфера.

Дополнительная литература

1
24.04.2017, 15:04
3 ответа

Нет. У каждого пользователя есть один crontab. Почему? Потому что crontab — это «таблица» («вкладка») всех заданий cron, связанных с одним пользователем.

Если вы хотите запустить несколько вещей с помощью cron, просто добавьте несколько строк в свой crontab.

Если у вас есть несколько файлов со спецификациями заданий cron, просто объедините их:

cat crontab1 crontab2 crontab3 >my-crontab
crontab my-crontab
3
27.01.2020, 23:14

Два способа обхода одного crontab.

Поместите записи crontab в файлы в каком-нибудь каталоге, например ~/crontab.d/thisandthat.cron, затем зафиксируйте любые изменения в системном crontab с помощью:

cat ~/crontab.d/*.cron | crontab -

Расширение .cron во избежание случайного включения файлов резервных копий из редакторов. Обратите внимание, что, поскольку все файлы объединены вместе, любые переменные, установленные в файлах, также будут применяться к файлам, которые будут добавлены позже.

Вы также можете сделать что-то похожее на то, как /etc/cron.hourly и друзья реализованы в Debian. Главный /etc/crontab содержит такие правила:

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

Вы можете настроить одну запись crontab для запуска нескольких программ. run-parts dir в Debian похож на for f in dir/* ; сделать "$f" ; done за исключением того, что он пропускает нечетные имена файлов, опять же, чтобы избежать запуска файлов резервных копий, созданных редакторами и т. д.

7
27.01.2020, 23:14

Вы можете просто прочитать фактическую запись и добавить новую сразу после нее.
Как только вы запустите этот:

crontab -u smarak /tmp/my-crontab

В идеале вы могли бы сделать что-то вроде:

crontab -u smarak <(cat /root/my-alternate-crontab) <(crontab -l)

Но кажется, что crontab не принимает приведенную выше форму, поэтому здесь работа -вокруг:

cat /root/my-alternate-crontab <(crontab -l)| crontab -u smarak -

Это работает для меня. Надеюсь, это поможет.

0
05.03.2020, 16:25

Теги

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