Нужна помощь в создании дискового пространства

Согласно этой статье LWN, это поведение прорывается в ядро ​​вокруг версии 2.6.25. Короче, если целевая файловая система rw, привязка чего-то сверху не может преобразовать ее в ro.

В 2.6.26 они частично фиксировали вещи, чтобы вы могли запускать перезагрузку (поскольку вы, (d2)

Вот что я пытался в fstab:

/home/oli/Desktop/testmount  /mnt none bind,ro

После запуска mount -a, /mnt смонтирован, но я все еще могу создавать файлы. После того, как он был выключен sudo mount -o remount /mnt, он стал доступен только для чтения.

Итак, я думаю, что самый чистый метод - либо иметь строку в /etc/rc.local, либо написать суперпростой сценарий Upstart, который начинается с mountall (так это происходит сразу).

1
задан 16 September 2012 в 12:29

2 ответа

Чтобы запустить скрипт, вам нужно настроить задание cron: Как настроить cronjob?

Теперь, внутри вашего скрипта, вам нужно будет сделать что-то вроде этого:

#!/bin/bash
#script that simply saves the output of df -h to an output file
#which is sent as an attachment to an e-mail

#a) save the output of the command:
temp_file=$(mktemp)

df -h > $temp_file 2> /dev/null

/root/email.py recipient@gmail.com "Title here" "Body here. The current date and time is $(date)" "$temp_file"

sleep 3
rm -rf $temp_file

Как вы можете видеть, я вызываю скрипт python из вашего корневого пути (не читаемый, но никто другой, кроме самого root), который принимает следующие аргументы:

«email-адрес получателя», «email-адрес электронной почты», «вложение» по электронной почте »

Этот скрипт python таков:

#!/usr/bin/python
import os, re
import sys
import smtplib

from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.MIMEText import MIMEText


SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587


sender = 'youremailhere@gmail.com'
password = "yourpasswordhere"
recipient = sys.argv[1]
subject = ''
message = sys.argv[3]

def main():
    msg = MIMEMultipart()
    msg['Subject'] = sys.argv[2]
    msg['To'] = recipient
    msg['From'] = sender

    part = MIMEText('text', "plain")
    part.set_payload(message)
    msg.attach(part)

    session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

    session.ehlo()
    session.starttls()
    session.ehlo

    session.login(sender, password)

    fp = open(sys.argv[4], 'rb')
    msgq = MIMEBase('audio', 'audio')
    msgq.set_payload(fp.read())
    fp.close()
    # Encode the payload using Base64
    filename=sys.argv[4]
    msgq.add_header('Content-Disposition', 'attachment', filename=filename)
    msg.attach(msgq)
    # Now send or store the message
    qwertyuiop = msg.as_string()



    session.sendmail(sender, recipient, qwertyuiop)

    session.quit()
    os.system('notify-send "Your disk space related email has been sent."')

if __name__ == '__main__':
    main()

Конечно, вам понадобится чтобы предоставить ему электронную почту и пароль gmail в верхней части скрипта (переменные sender и password). Если вы установите пакет libnotify-bin, то, если письмо было успешно отправлено, вы будете уведомлены с уведомлением на рабочем столе.

Итак, подведя итоги, вам нужно будет настроить работу cron с указанным выше скрипт gmail . Этот сценарий bash сохранит вывод df -h во временном файле, который будет отправлен через скрипт python на адрес получателя по вашему выбору (насколько я помню, почтовый адрес отправителя должен быть gmail).

PS: Вышеупомянутое решение покажет свободное и полное дисковое пространство только ваших смонтированных файловых систем. Если это проблема, сообщите мне, чтобы продлить мой ответ о том, как автоматически смонтировать все доступные файловые системы, а затем запустить df -h.

4
ответ дан 25 May 2018 в 06:28
  • 1
    Я рекомендую использовать пакет sendemail для отправки писем непосредственно на удаленные SMTP-серверы. – gertvdijk 18 September 2012 в 06:17
  • 2
    @gertvdijk, пожалуйста, не стесняйтесь редактировать ответ и включать ваши, а также указать, почему sendemail может быть лучшим вариантом. Или добавьте его в качестве ответа! – hytromo 18 September 2012 в 06:59

Вы можете использовать этот скрипт для проверки использования диска

#!/bin/bash

limit=85
email=you@domain.com
host=`hostname`
out=`df -k | grep "^/dev" | awk '{ if($5 > $limit) print "\nDisk space is critial on " $1,$5,$6 "\n"}'`
usr/bin/mail -s "Disk Space Alert on $host: $out" $email

Используйте cron, чтобы запустить сценарий автоматически. Проверьте этот онлайн-генератор cron, чтобы помочь вам в настройке.

0
ответ дан 25 May 2018 в 06:28

Другие вопросы по тегам:

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