Я сам вмешался в эту проблему и решил сделать несколько тестов. Я полностью согласен с ответом, что следует упаковывать по каждому дистрибутиву отдельно, но иногда возникают практические вопросы, которые препятствуют этому (не в последнюю очередь трудовые ресурсы).
Таким образом, для тех, кто хочет «автообнаружить» вот что я узнал на ограниченном наборе дистро (подробнее ниже):
Вы можете сказать выскочить из:
[['/sbin/init --version '= ~ upstart]] & & эхо да | | эхо нет
Вы можете сообщить systemd из:
[['systemctl' = ~ -\.mount]] & & эхо да | | эхо нет
Вы можете сообщить sys-v init из:
[[-f/etc/init.d/cron & &! -h/etc/init.d/cron]] & & echo yes
Вот мои эксперименты со следующей командной строкой:
if [[ `/sbin/init --version` =~ upstart ]]; then echo using upstart;
elif [[ `systemctl` =~ -\.mount ]]; then echo using systemd;
elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]; then echo using sysv-init;
else echo cannot tell; fi
на ec2 экземплярах (я включаю идентификатор us-east AMI id):
Просто для ясности: Я не утверждаю, что это глупо! , почти наверняка нет. Также обратите внимание, что для удобства я использую матчи bash regexp, которые доступны не везде. Выше достаточно хорошо для меня сейчас. Тем не менее, если вы найдете дистрибутив, где он не работает, пожалуйста, дайте мне знать, и я постараюсь исправить его, если есть EC2 AMI, который воспроизводит проблему...
-121--4002-
Приближаясь к нему в другой путь "круглый: крон ведет журнал того, что он делает, именно для того, чтобы избежать такого рода проблем в первую очередь. В моей системе журнал хранится в /var/cron/log
и выглядит следующим образом:
==> /var/cron/log <==
Oct 25 00:21:01 fortress cron[20232]: (vucar) CMD (/home/vucar/lighttpd-watchdog)
Эта строка сообщает мне, что экземпляр cron с PID 20232 на машине fortress
выполняет /home/vucar/lighttpd-watchdog
от имени пользователя vucar
. Хорошо работающая система имеет только один cron, так что это будет просто.
Это также работает для на
рабочих местах, так как они обычно просто передаются крону в любом случае:
==> /var/cron/log <==
Oct 25 00:28:01 fortress cron[31282]: (vucar) ATJOB (1414189680.c)
Фрагменты из системы BSD, но общая концепция, скорее всего, та же самая везде.
-121--25379-
Я исследовал источник того, как cron обрабатывает выходные данные своих заданий по почте:
cron (8)
устанавливает stdout и stderr выполняемого задания и направляет их непосредственно в mail (1)
, не оставляя никаких временных файлов. См. do _ command.c
вокруг линии 411 ( 1 ). Почта (1)
должна быть полностью готова, так как ей нужны заголовки. Он открывает временный файл (обычно /tmp/mail-R...
), но удаляет его сразу, так как не оставляет следов. Loøk в коллекции.c
на строке 83 ( 2 ). В любом случае, как представляется, предпринимаются преднамеренные усилия не для того, чтобы оставить взаимопереплетающийся временный файл вокруг. Если вам нужно (или нужно) перехватить то, что происходит в длинном cronjob, вы должны настроить временный файл самостоятельно.
На этот момент я предлагаю, например, добавить tee $ HOME/cronjob.out
в ваш cronjob, который захватывает копию результатов работы в безопасном месте.
Каноническая отправная точка для понимания всего этого является размышления Кена Томпсона на доверительном доверенном доверии , где он демонстрирует, что вы не можете действительно доверять системе, чтобы не иметь задних дверей, даже если вы восстановите из источника Отказ
Воспроизводимые наращивания инициативы в Debian стремятся помочь предоставлять пользователям доверие пользователей, несмотря на это. Представьте себе, что вы управляете аудитом безопасности на системе, подобной системе, как Debian: вы прочитали исходный код и убедитесь, что он соответствует вашим требованиям. Но когда вы используете систему, такую как Debian, вы не используете исходный код; Вы используете двоичные файлы, предоставленные распределением. Как вы можете быть уверены, что двоичные файлы фактически соответствуют исходному коду, который вы проверили?
, поскольку он выдерживает, вы не можете: компьютеры, используемые для создания двоичных файлов, могли быть скомпрометированы, или, возможно, даже сопровождающий пакет загружал скомпрометированный Двоина, который не соответствует исходному коду.
При воспроизводимых монтажах двоичные файлы поставляются с достаточной информацией, которую вы можете взять из опубликованного исходного кода, восстановить двоичные файлы и получить байт-байтовые идентичные двоичные файлы для публикации в архивах. Это доказывает, что исходный код соответствует двоичным файлам, поэтому результаты вашего анализа исходного кода также могут быть применены к двоичным файлам, пока вы можете сказать одинаковую из всех других двоичных файлов, которые способствуют созданию двоичных файлов вы анализ. Это означает, что вам нужно иметь возможность воспроизводиться построить компилятор, библиотеки и т. Д., которые участвуют; И поэтому вам нужно быть в состоянии воспроизводить построить распределение осторожности, которое является тому, что воспроизводимые Debian Builds направлены на.
Это означает, что Debian будет гарантировать, что имеющиеся у вас двоичные пакеты Debian точно из исходных текстов, а не из какого-то другого кода. Они будут хранить информацию о двоичных файлах в файлах отслеживания пакетов.
Когда вы получаете двоичные пакеты на дистрибутивах Linux, вы не можете быть уверены, что эти двоичные пакеты получены из исходных текстов, выпущенных дистрибутивом.