1С — Отчет на почту по расписанию.
Задача: сформировать отчет и отправить его по почте раз в день (отчёт на почту по расписанию).
Используем для этого регламентные задания.
Жизнь замечательных грибов
Задача: сформировать отчет и отправить его по почте раз в день (отчёт на почту по расписанию).
Используем для этого регламентные задания.
monit — утилита, которая позволяет отслеживать запущен ли процесс. Если нет — она может его перезапустить.
1) Устанавливаем из пакетов:
1 |
pkg install sysutils/monit |
2) Добавляем в автозагрузку:
в файл /etc/rc.conf добавляем строку monit_enable=»YES»
3) Создаем файл настроек на основе /usr/local/etc/monitrc.sample .Можно просто переименовать в /usr/local/etc/monitrc
Из того что нужно было мне:
1 2 |
set daemon 30 #интервал проверки в секундах set logfile /var/log/monit.log #куда пишем логи |
Веб интерфейс, как лишняя «дыра» не нужен — комментируем
1 2 3 4 |
#set httpd port 2812 and # use address localhost # allow localhost # allow admin:monit |
1 |
include /etc/monit.d/* #откуда берем настройки по мониторингу |
4) В /etc/monit.d/ создаем файл, например monit.conf с отслеживаемыми сервисами. Например:
1 2 3 |
check process shellinaboxd with pidfile /var/run/shellinaboxd.pid start program = "/usr/local/etc/rc.d/shellinaboxd start" stop program = "/bin/sh -c 'kill `cat /var/run/shellinaboxd.pid`'" |
Вот пример конфига который получился в конце концов у меня:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
set mailserver mail.erfwerfwer.ru USERNAME "fser@erfwer.ru" PASSWORD "й423523452345" set alert init@уцвцув.ru set mail-format {from: цувцу@цувцувцу.ru} check process mpd5 with pidfile /var/run/mpd5.pid start program = "/usr/local/etc/rc.d/mpd5 start" stop program = "/bin/sh -c 'kill `cat /var/run/mpd5.pid`'" if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert check process radiusd matching "radiusd" start program = "/usr/local/etc/rc.d/radiusd start" stop program = "/usr/bin/killall radiusd" if cpu usage > 95% for 10 cycles then restart if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert check process mysqld matching "mysqld" start program = "/usr/local/etc/rc.d/mysql-server start" stop program = "/usr/bin/killall mysqld" if cpu usage > 95% for 10 cycles then restart if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert check process db2dhcp matching "db2dhcp" start program = "/usr/local/etc/rc.d/db2dhcp.sh start" stop program = "/usr/bin/killall db2dhcp" if cpu usage > 95% for 10 cycles then restart if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert check process squid matching "squid" start program = "/usr/local/etc/rc.d/squid start" stop program = "/usr/bin/killall squid" if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert check process named matching "named" start program = "/usr/sbin/named -t /var/named -u bind" stop program = "/usr/bin/killall named" if cpu usage > 95% for 10 cycles then restart if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert check process httpd matching "httpd" start program = "/usr/local/etc/rc.d/apache22 start" stop program = "/usr/bin/killall apache22" if cpu usage > 95% for 10 cycles then restart if cpu > 60% for 2 cycles then alert if not exist then restart if not exist for 2 cycles then alert |
Формат даты MySQL и Python несколько отличаются, поэтому не получится результат запроса — дату, использовать сразу. Нужно предварительно её отформатировать при помощи функции strptime(дата, формат). Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
sql="select count(*) as cnt,(now()-interval %s day) as ddy from payments where mod_person=%s and year(pay_date)=year(now()-interval %s day) and month(pay_date)=month(now()-interval %s day) and day(pay_date)=day(now()-interval %s day)"; cursor2=connb.cursor(dictionary=True,buffered=True) cursor2.execute(sql,[days,person_id,days,days,days]); myrow3 = cursor2.fetchone() while myrow3 is not None: cnt=myrow3["cnt"]; ddy=myrow3["ddy"]; ddt=datetime.datetime.strptime(str(ddy),"%Y-%m-%d %H:%M:%S") wd=datetime.datetime.weekday(ddt); if wd==0:dn="Понедельник"; if wd==1:dn="Вторник"; if wd==2:dn="Среда"; if wd==3:dn="Четверг"; if wd==4:dn="Пятница"; if wd==5:dn="Суббота"; if wd==6:dn="Воскресенье"; #Если платежей нет в выходные, тогда АХТУНГ!! if ((cnt==0) and (wd!=5) and (wd!=6)): func.putlog (str(email.encode('utf-8'))+" Внимание! В биллинге нет платежей за "+str(ddy)+" ("+str(wd)+") от "+str(name.encode('utf-8'))+"!!") func.AddMailQwery(noc,'цувцу@цувцув.ru',email,"Внимание! В биллинге нет платежей за "+str(ddy)+" ("+str(wd)+") от "+str(name.encode('utf-8'))+"!!","Внимание! В биллинге нет платежей за "+str(ddy)+" ("+str(wd)+") от "+str(name.encode('utf-8'))+"!!"); #SendMailAttachment($email,$cfg->smtpusername,"Внимание! В биллинге нет платежей за $ddy ($dn) от $name!!!","Внимание! В биллинге нет платежей за $ddy ($dn) от $name!!!"); myrow3 = cursor2.fetchone() |
На днях прилетела задача, прикрутить на сайтах ГК, кнопку которая позволит «пожаловаться» руководителю на качество сервиса. Простая задача как всегда осложняется тем, что сайты — это набор разных движков. Плюс хочется при исправлении чего-либо в коде, чтобы это одновременно распространялось на все сайты. Пилить код для каждого движка лениво, да и бред. Было отметено сразу. Можно поступить проще: написать javascript код, который вне зависимости от движка сайта, будет работать одинаково на всех сайтах. Всё же добавление виджета на сайт сведется к добавлению мааахонького кусочка кода, который уже дальше подтянет всё остальное. Один нюанс. Код должен работать абсолютно автономно. Никаких там сахаров типа Jquery! Ибо это потянет за собой слишком увеличение веса страницы..да и может законфликтовать с движками сайтов.
Для того чтобы «сбросить» пароль администратора нужно открыть файл users.auth.php и исправить строчку с пользователем admin на:
1 |
admin:$1$4fd0ad31$.cId7p1uxI4a.RcrH81On0:DokuWiki Administrator:mail@host.com:admin,user |
логин/пароль после этого будет admin/admin