крон - готовая к производству альтернатива

Единственным полностью надежным способом сделать это является трассировка системных вызовов. Программа strace (упомянутая @ gowenfawr) выполняет это правильно и реализована в виде системного вызова ptrace (2) . Однако следует отметить, что вызов ptrace трудно использовать правильно; если вы не можете использовать strace -e open напрямую, рассмотрите второй способ:

Для большинства процессов вместо этого можно перехватить вызовы функции open библиотеки C через LD _ PRELOAD . Однако для враждебной программы C тривиально избегать этого; но если вы доверяете программе не делать сами syscalls, это проще реализовать, чем programmatic ptrace .

Для процесса, который, как вы знаете, написан на языке более высокого уровня, таком как python, вместо этого можно перехватить высокоуровневые открытые вызовы, но это, скорее всего, будет сложнее, чем перехватывать вызовы С-уровня, если язык не был разработан для поддержки такого перехвата (python не является).

Наконец - все вышеперечисленные параграфы предполагают, что файлы открываются с помощью open . Это не всегда так, существуют также openat , open64 , recvmsg вспомогательные данные и унаследованные дескрипторы файлов от родительского объекта.

-121--84591-

Schroot делает ряд действий, чтобы сделать систему chroted пригодной для использования. Это задание выполняется сценариями в /etc/schroot/setup.d/. Эти действия конфигурируются файлами в каталоге профиля schroot, который обозначается ключом profile в конфигурации schroot и по умолчанию имеет значение /etc/schroot/default/ (конфигурация schroot также может указывать другие местоположения файлов, см. руководство для получения подробной информации). Действия запуска включают:

  • Монтировать некоторые файловые системы, как указано в файле fstab в каталоге профиля.
  • Копирование файлов из хост-системы в chroot. Список копируемых файлов считывается из файла copyfiles из каталога профиля.
  • Перезаписать базы данных NSS в chroot, считанные с хоста. Список перезаписываемых баз данных считывается из файла nssdatabases из каталога профиля. Это похоже на копирование файлов, но оно не только копирует /etc/passwd в chroot, но и извлекает записи из других источников, таких как NIS или LDAP.

По умолчанию copyfiles содержит /etc/resolv.conf , чтобы гарантировать, что программы в chroot будут иметь доступ к DNS, как те, которые находятся вне chroot. Настройка chroot по умолчанию предполагает, что требуется наличие одних и тех же пользователей внутри и вне chroot, поэтому nssdatabases содержит все обычные базы данных, включая passwd ,и профиль по умолчанию fstab содержит не только файловые системы, такие как /proc и /dev , которые необходимы для работы многих программ, но и /home .

Если вы не хотите перезаписывать что-либо в chroot, объявите профиль schroot без copyfiles и nssdatabases . Вероятно, вам потребуется fstab , который монтирует основные компоненты, но не /home .

Более полезная конфигурация schroot воспроизводит учетные записи пользователей и их домашние каталоги, но не системные учетные записи. Воспроизведение учетных записей системы является неудачным, поскольку могут быть разные учетные записи внутри и снаружи chroot. Например, Debian и их производные используют динамически назначенные учетные записи для большинства системных программных обеспечений, поэтому соответствие между именем пользователя и номером для большинства системных учетных записей зависит от порядка установки программ. Для этого удалите passwd , shadow , group и gshadow из файла nssdatabases и создайте собственный сценарий, добавляющий только копируемые учетные записи.

Следующий сценарий можно записать как /etc/schroot/setup.d/20appendaccounts для копирования только учетных записей в реальном диапазоне пользователей.

#!/bin/sh
## Append users and groups from the host.
set -e

. "$SETUP_DATA_DIR/common-data"
. "$SETUP_DATA_DIR/common-functions"
. "$SETUP_DATA_DIR/common-config"

if [ -z "$SETUP_NSSDATABASES" ] || ! [ -f "$SETUP_NSSDATABASES" ]; then
  exit 0
fi

DATABASES='group gshadow passwd shadow'

want () {
  grep -qx "#>>$1" "$SETUP_NSSDATABASES"
}

start () {
  sed -i -e '/^#begin added by schroot$/,/^#end added by schroot$/d' "$tmpfile"
  {
    echo '#begin added by schroot'
    getent "$db" | case $db in
      ## passwd, group: copy the range for local human accounts
      passwd) awk -F : "$FIRST_UID <= \$3 && \$3 <= $LAST_UID";;
      group) awk -F : "$FIRST_GID <= \$3 && \$3 <= $LAST_GID";;
      ## shadow, gshadow: copy only entries with a password hash
      shadow|gshadow) awk -F : '$2 ~ /^\$/';;
    esac
    echo '#end added by schroot'
  } >>"$tmpfile"
}

iterate () {
  for db in $DATABASES; do
    want "$db" || continue
    dbfile=$CHROOT_PATH/etc/$db
    tmpfile=$dbfile.$$
    [ -f "$dbfile" ] || continue
    cp -f -- "$dbfile" "$tmpfile"
    "$@"
    if ! [ -s "$tmpfile" ] || cmp -s -- "$dbfile" "$tmpfile"; then
      rm -f -- "$tmpfile"
    else
      mv -- "$tmpfile" "$dbfile"
    fi
  done
}

case $STAGE in
  setup-start|setup-recover)
    FIRST_UID=1000
    LAST_UID=29999
    FIRST_GID=1000
    LAST_GID=29999
    if [ -e /etc/adduser.conf ]; then . /etc/adduser.conf; fi
    umask 600
    iterate start;;
esac

Отредактируйте файл nssdatabases профиля, чтобы он содержал следующие строки, или поместите setup.nssdatabases = default/nssdatabases-append в профиль schroot и запишите следующие строки в default/nssdatabases .

#>>passwd
#>>shadow
#>>group
#>>gshadow
services
protocols
networks
hosts

Schroot не перезаписывает ни один файл в вашем домашнем каталоге в конфигурации по умолчанию. --preserve-environment относится к переменным среды и здесь не относится.

-121--73386-

Можно отследить системные вызовы , выполняемые программой. Это обычный метод определения файлов, к которым он обращается. Инструмент для этого называется truss во многих системах Unix, dtruss в OSX, strace в Linux. Я опишу использование Linux здесь; проверьте руководство по другим системам.

Наиболее простой формой является

strace myprogram arg1 arg2

. При этом выводится журнал всех системных вызовов, выполненных myprogram . ( Пример .) Для сохранения журнала в файле используйте опцию -o . Для регистрации вызовов, выполняемых подпроцессами, используйте опцию -f . Для выбора системных вызовов, регистрируемых в журнале, используется опция -e . Подробные сведения о том, что можно использовать в качестве аргумента для -e , см. в руководстве. Например, следующий вызов регистрирует системные вызовы, связанные с файлами (открытие и закрытие, список каталогов и т.д.), за исключением read и write .

strace -e'file,!read,!write' -o /tmp/myprogram.log -f myprogram arg1 arg2

0
08.04.2015, 04:23
4 ответа

На самом деле, Cron , готовый к производству. Это было тестировано на бой так много раз, трудно обвинить его в неисправности. То, что вы можете испытать, это проблемы, возникающие в результате простых ошибок. Это будет много помогать, если вы указали, что именно ваши проблемы с CRON.

Как уже указывалось в Гуале, вы можете добавить >> / tmp / quotefile 2> & 1 для вас в Crontab. Что это делает:

  • >> / tmp / quotefile означает «добавить поток stdout команды на / tmp / uverefile». Это просто пишет все, что бы в противном случае были бы напечатаны на вашем терминале в указанный файл. Обратите внимание на использование >> (добавьте) вместо > (перезаписать).
  • 2> & 1 означает «отправить STDERR на stdout». В человеческом выражении: напишите выходные данные любых ошибок в том же месте, где вы пишете стандартный выход (объясненные выше)

, используя его, у вас будет полный журнал того, что произошло после того, как Cron выполнил ваш скрипт. Обратите внимание, что это может быть хорошая идея сделать сценарий распечатать текущую дату (а также некоторые другие, возможно, возможно), чтобы у вас были эти данные в файле журнала.

Другое, что нужно иметь в виду, - это путь . Cron проходит в слегка разной среде, чем ваш интерактивный сеанс терминала, поэтому обычно хорошая идея включить выход ECHO $ ​​PATH в самом скристеме или в строке Crontab, например: * / 20 * * * * Export Path = <Вставить выход Echo $ Path здесь>; .

3
28.01.2020, 02:17

Я вырос довольно любит jenkins ci для всех видов задач стероидов. Я использую его, чтобы сделать и восстановить резервные копии, очистить устаревшие файлы / настройки, пользовательские процедуры, включающие несколько шагов и т. Д. В основном все, что можно автоматизировать. Регистрация великолепна, а функции, которые вам нужны, либо там по умолчанию, либо легко добавляются одним из множества доступных плагинов.

Дайте ему вращение, вы зададите интересно, как вы не знакомство о том, чтобы узнать Джей Батлер.

0
28.01.2020, 02:17

Вы можете использовать > / TMP / LOGFILE 2> & 1 после вашей команды Crontab Clangled для перенаправления вывода из команд в файл журнала. Также проверьте Gnome-график для графического интерфейса для игры с Crontab и в .

1
28.01.2020, 02:17

Планировочным центром, готовым к производству на Unix-системах, является компания cron.

Запись в журнал

Крон регистрирует то, что он делает с системными журналами. Он отправляет выходные данные заданий, если таковые имеются, по электронной почте.

Повторные попытки выполнения заданий при отказе

Cron не делает этого, по уважительной причине. Повторные попытки при отказе - это бизнес-логика. Откуда системе знать, какие сбои должны приводить к повторным попыткам и когда, а какие - к фатальным ошибкам? Если вам нужно повторить попытку, либо заставьте задачу повторить попытку так, как вы хотите, либо запланируйте несколько заданий в разное время.

уведомления

См. журнал выше. Обычно успешные задания не приводят к уведомлению, а только к записи в журнале. Если вы хотите получить уведомление о завершении задания, добавьте его в скрипт вашей задачи, используя предпочтительный механизм уведомления. (В отличие от Windows, которая имеет квази-обязательный графический интерфейс, Unix не запускает пакетные задания в среде GUI, так что нет имманентного механизма уведомления на основе GUI)

намного больше.

Что?

Так как у меня не установлен MTA, реальные ошибки теряются.

"Доктор, мне больно, когда я это делаю."

Установите MTA. Хотя некоторые дистрибутивы опускают его из базовых инсталляций, MTA, способная посылать электронную почту, является ожидаемым компонентом любой инсталляции Unix.

1
28.01.2020, 02:17

Теги

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