Задание mysqldump cron, заполняющее мой системный журнал

Та же проблема возникла у меня сегодня, и я смог найти этот вопрос только в Интернете. Поэтому я попытался отладить его самостоятельно...

Скрипт/etc/initramfs-tools/hooks/mount_cryptroot(строка 21 )пытается поместить файл в каталог /var/tmp/mkinitramfs_uIC6Q0/root/. Этот каталог отсутствует, согласно сообщению об ошибке. Соответствующая часть скрипта:

SCRIPT="${DESTDIR}/root/mount_cryptroot.sh"
cat > "${SCRIPT}" << 'EOF'

Каталог /var/tmp/mkinitramfs_uIC6Q0/— это временный каталог, в котором собрано содержимое нового файла initrd. Я предполагаю, что у initrd больше нет корневого подкаталога. Итак, я взглянул на содержимое существующего образа initrd :

.
# mkdir initrd
# cd initrd
# gunzip -c /boot/initrd.img-4.9.0-3-amd64 | cpio -i
125955 blocks
# ls
bin  conf  etc  init  lib  lib64  root-aBcDeF  run  sbin  scripts
#

У каталога rootесть суффикс с 6 случайными буквами/цифрами (, измененный здесь наaBcDeF). Вероятно, это из соображений безопасности. Я обнаружил, что суффикс меняется каждый раз, когда генерируется initrd.

Таким образом, решение состоит в том, чтобы расширить сценарий /etc/initramfs-tools/hooks/mount_cryptroot, чтобы узнать истинное имя корневого каталога, включая суффикс, и использовать его вместо простого root.

Это можно сделать, вставив

ROOTDIR="$(cd "${DESTDIR}"; echo root-*)"

перед неисправными строками и изменением неисправных строк на

SCRIPT="${DESTDIR}/${ROOTDIR}/mount_cryptroot.sh"
cat > "${SCRIPT}" << 'EOF'

. Есть еще две строки, содержащие rootбез суффикса. Их нужно изменить на

cat > "${DESTDIR}/${ROOTDIR}/.profile" << EOF

и

/${ROOTDIR}/mount_cryptroot.sh && exit 1 || echo "Run./mount_cryptroot.sh to try unlocking again"

. Это решило проблему для меня и

update-initramfs -u -k all

а также ввод пароля через SSH при загрузке снова заработал.

Весь мой сценарий /etc/initramfs-tools/hooks/mount_cryptrootпосле адаптации:

#!/bin/sh

# Author: http://www.dont-panic.cc/capi/2012/10/24/fully-encrypted-vserver-with-ubuntu-12-04/
# This script generates two scripts in the initramfs output,
# /root-xxxxxx/mount_cryptroot.sh and /root-xxxxxx/.profile
ALLOW_SHELL=1
# Set this to 1 before running update-initramfs if you want
# to allow authorized users to type Ctrl-C to drop to a
# root shell (useful for debugging, potential for abuse.)
#
# (Note that even with ALLOW_SHELL=0 it may still be possible
# to achieve a root shell.)
#

if [ -z ${DESTDIR} ]; then
exit
fi

ROOTDIR="$(cd "${DESTDIR}"; echo root-*)"

SCRIPT="${DESTDIR}/${ROOTDIR}/mount_cryptroot.sh"
cat > "${SCRIPT}" << 'EOF'
#!/bin/sh
CMD=
while [ -z "$CMD" -o -z "`pidof askpass plymouth`" ]; do
CMD=`ps -o args | grep 'open --type luks' | grep -v grep`
sleep 0.1
done
while [ -n "`pidof askpass plymouth`" ]; do
$CMD && kill -9 `pidof askpass plymouth` && echo "Success"
done
EOF

chmod +x "${SCRIPT}"

# Run mount_cryptroot by default and close the login session afterwards
# If ALLOW_SHELL is set to 1, you can press Ctrl-C to get to an interactive prompt
cat > "${DESTDIR}/${ROOTDIR}/.profile" << EOF
ctrl_c_exit() {
exit 1
}
ctrl_c_shell() {
# Ctrl-C during.profile appears to mangle terminal settings
reset
}
if [ "$ALLOW_SHELL" == "1" ]; then
echo "Unlocking rootfs... Type Ctrl-C for a shell."
trap ctrl_c_shell INT
else
echo "Unlocking rootfs..."
trap ctrl_c_exit INT
fi
/${ROOTDIR}/mount_cryptroot.sh && exit 1 || echo "Run./mount_cryptroot.sh to try unlocking again"
trap INT
EOF
0
04.11.2019, 14:53
1 ответ

Если команда в crontab записывает что-либо в стандартный вывод, тогда cron возьмет этот вывод и попытается отправить его вам по почте. По-видимому, у вас не установлен MTA, поэтому cron не может отправить почтовое сообщение и регистрирует этот сбой в файле журнала.

Если вы хотите увидеть, что задание cron записывает в свой стандартный вывод, вам необходимо установить MTA. :cron отправит вам эти выходные данные по почте и, предположительно, ничего не зарегистрирует, поскольку отправка почты будет выполнена успешно.

Если вы не хотите видеть вывод, перенаправьте его в /dev/null. Я бы все же настроил MTA, чтобы cron был счастлив, даже если какое-то задание cron неожиданно выдает результат.

Подробности описаны на справочной странице crond (8 ).

0
28.01.2020, 03:09

Теги

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