bcachefs-tools/fsck/bcachefsck_fail
Darrick J. Wong fbfdd05ac5 fsck: add systemd service definitions for automatic online service
Add some systemd service files so that bcachefs can automatically fsck
mounted filesystems in the background.  Hopefully with minimal
disruption to frontend operations.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
2023-12-07 11:57:36 -05:00

64 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2023-2024 Oracle. All Rights Reserved.
# Author: Darrick J. Wong <djwong@kernel.org>
# Email logs of failed bcachefsck and bcachefsck_all unit runs
recipient="$1"
test -z "${recipient}" && exit 0
service="$2"
test -z "${service}" && exit 0
mntpoint="$3"
hostname="$(hostname -f 2>/dev/null)"
test -z "${hostname}" && hostname="${HOSTNAME}"
mailer="$(command -v sendmail)"
if [ ! -x "${mailer}" ]; then
echo "${mailer}: Mailer program not found."
exit 1
fi
fail_mail_mntpoint() {
local scrub_svc
# Turn the mountpoint into a properly escaped systemd instance name
scrub_svc="$(systemd-escape --template "${service}@.service" --path "${mntpoint}")"
cat << ENDL
To: ${recipient}
From: <${service}@${hostname}>
Subject: ${service} failure on ${mntpoint}
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
So sorry, the automatic ${service} of ${mntpoint} on ${hostname} failed.
Please do not reply to this mesage.
A log of what happened follows:
ENDL
systemctl status --full --lines 4294967295 "${scrub_svc}"
}
fail_mail() {
cat << ENDL
To: ${recipient}
From: <${service}@${hostname}>
Subject: ${service} failure
So sorry, the automatic ${service} on ${hostname} failed.
A log of what happened follows:
ENDL
systemctl status --full --lines 4294967295 "${service}"
}
if [ -n "${mntpoint}" ]; then
fail_mail_mntpoint | "${mailer}" -t -i
else
fail_mail | "${mailer}" -t -i
fi
exit "${PIPESTATUS[1]}"