Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 66 lines (54 sloc) 1.77 KB
#!/usr/bin/python3
import sys
import os
import subprocess
from subprocess import Popen, PIPE
try:
job = sys.argv[1]
except IndexError:
sys.exit("Usage: %s <unit>" % sys.argv[0])
for pgm in ('/usr/sbin/sendmail', '/usr/lib/sendmail'):
if os.path.exists(pgm):
break
else:
print("<3>can't send error mail for %s without a MTA" % job)
exit(0)
user = subprocess.check_output(['systemctl','show',job,'--property=User'], universal_newlines=True)
user = user.rstrip('\n').split('=')[1]
if not user: user = 'root'
mailto = user
job_env = subprocess.check_output(['systemctl','show',job,'--property=Environment'], universal_newlines=True)
job_env = job_env.rstrip('\n').split('=', 1)[1]
if job_env:
for var in job_env.split(' '):
try:
key , value = var.split('=', 1)
if key == 'MAILTO': mailto = value
except ValueError:
pass
if not mailto: exit(0)
hostname = os.uname()[1]
body = "From: root (systemd-cron)\n"
body += "To: " + mailto + "\n"
body += "Subject: [" + hostname + "] job " + job + " failed\n"
body += "MIME-Version: 1.0\n"
body += "Content-Type: text/plain; charset=UTF-8\n"
body += "Content-Transfer-Encoding: 8bit\n"
body += "Auto-Submitted: auto-generated\n"
body += "\n"
for locale in (None, 'C.UTF-8', 'C'):
if locale:
os.environ['LC_ALL'] = locale
try:
systemctl = subprocess.check_output(['systemctl', 'status', job], universal_newlines=True)
except UnicodeDecodeError:
# current locale is broken, try again
pass
except subprocess.CalledProcessError as e:
if e.returncode != 3:
raise
else:
body += e.output
break
p = Popen(['sendmail','-i','-B8BITMIME',mailto], stdin=PIPE)
p.communicate(bytes(body, 'UTF-8'))
You can’t perform that action at this time.