вторник, 24 июля 2018 г.

Запуск ночью vacuumdb


Как посмотреть размер базы ?
Регламентная очистка
Виртуальный образ p962.ova
краткий справочник
тоже
Скрипт автоматической переиндексации (reindex) и удаления мертвых данных (full vacuum) в базе postgresql.
Автоматическая сборка мусора (Automatic Vacuuming) в PostgreSQL
Опыт обслуживания базы 1С в PostgreSQL


Как посмотреть размер базы demo postgresql?
$ sudo su - postgres
$ psql 

В байтах:

postgres=# select pg_database_size('demo');

 pg_database_size
------------------
       5579448836
(1 строка)

postgres=#

В Мбайтах: 

postgres=# SELECT pg_size_pretty( pg_database_size( 'demo' ) );

 pg_size_pretty
----------------
 5321 MB
(1 строка)

postgres=#


Для борьбы с падением производительности, рекомендуют ночью запускать vacuumdb
 
$ sudo su - postgres 
 
Посмотреть базы:
psql -l
                                  Список баз данных
    Имя    | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   |     Права доступа
-----------+----------+-----------+-------------+-------------+-----------------------
 demo      | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 |
 postgres  | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 |
 template0 | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
(4 строки)

Сборка мусора вручную от пользователя posgres (примерно 5 минут)
$ vacuumdb --verbose --analyze --full --dbname=demo
переиндексация баз  
 
######################################################## 
Не регламентная операция
$ reindexdb --all
reindexdb: переиндексация базы данных "demo"
reindexdb: переиндексация базы данных "postgres"
reindexdb: переиндексация базы данных "template1"
########################################################
 

Можно настроить cron
 
Установка Postfix — агент передачи почты (MTA — mail transfer agent) 

Выбрать (только локальное использование) 
 
$ sudo apt-get install postfix 
 
 
 
$ sudo su - postgres 
$ crontab -e
(первый запуск по умолчанию [2]) 
 
Добавить в конец файла 
# Запуск vacuumdb каждый день в 22.01 предварительно удалив в 22.00 сообщения.
#00 22 * * * cp /dev/null /var/mail/postgres 
#01 22 * * * vacuumdb --verbose --analyze --full --quiet --dbname=demo
#Краткая форма: 
01 22 * * * vacuumdb --analyze --full --quiet --dbname=demo 
 
Сохранить.
 
Смотреть задания:
 
$ crontab -l 
 
#####################################################
Смотреть сообщения:
$ sudo su - postgres   
$ tail /var/mail/postgres
(можно $ nano /var/mail/postgres или просто через mc)
Но tail удобен тем что выводит последнее сообщение,
не забываем что работаем от пользователя postgres
 
postgres@ufo:~$ tail /var/mail/postgres
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/var/lib/postgresql>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=postgres>
Message-Id: <20180725111851.ADBBE19446DF@ufo>
Date: Wed, 25 Jul 2018 14:18:51 +0300 (MSK)

vacuumdb: очистка базы данных "demo"

postgres@ufo:~$
 

вторник, 17 июля 2018 г.

Зашарить папку по сети

$ sudo mkdir /home/share/
$ sudo chmod -R 777 /home/share/
$ sudo chown -R root:sambashare /home/share/
$ sudo cp -b -f /etc/samba/smb.conf /etc/samba/smb.conf.bak
$ sudo nano /etc/samba/smb.conf

Добавить в конец

[files]
path = /home/share/
comment = No comment
read only = no
available = yes
browseable = yes
writable = yes
guest ok = yes
public = yes
printable = no
locking = no
strict locking = no

Сохранить
Перезагрузить службу

$ sudo service smbd restart


Скачать по ссылке https://yadi.sk/d/ioMHRY0phr8-lA

файл fias_dbf.zip

(Вообще берем здесь https://its.1c.ru/download/fias2
 но нужно подготовить, переиндексировать локально, что бы  не создавать индексы по сети)

Загрузить по ssh в ~/

$ mv fias_dbf.zip  /home/share/
$ cd /home/share/
$ unzip fias_dbf.zip

Прописать в камине 3.5 (переиндексировать не нужно) папку с фиас

\\сервер\files



Подмонтировать внешний диск ubuntu

Подмонтируем внешний диск /dev/sdb1 на /mnt/sdb

$ sudo fdisk -l
Диск /dev/sdb: 931,5 GiB, 1000204886016 байтов, 1953525168 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 4096 байт
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Тип метки диска: dos
Идентификатор диска: 0x000487af

Устр-во    Загрузочный Start Конец Секторы   Size Id Тип
/dev/sdb1               2048 1953523711 1953521664 931,5G 83 Linux


---------------------------------------------------------------------
Поскольку делал позже, нужно перекинуть сохраненные образы в /home/user/Документы
Для этого примонтируем пока так:
$ sudo mkdir /mnt/sdb
$ sudo mount /dev/sdb1 /mnt/sdb -t auto
Сделаем user владельцем /mnt/sdb
$ sudo chown -R user:user /mnt/sdb

Размонтируем:
$ sudo umount /dev/sdb1
-------------------------------------------------------------------------------------------------------------
 
Автомонтирование по uuid
$ ls -l /dev/disk/by-uuid

user@s1030:~$ sudo mkdir /mnt/sdb
user@s1030:~$ sudo mount /dev/sdb1 /mnt/sdb -t auto
user@s1030:~$ mc

user@s1030:~$ sudo chown -R user:user /mnt/sdb
user@s1030:~$ mc

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/mcedit
  4. /usr/bin/vim.basic
  5. /usr/bin/vim.tiny

Choose 1-5 [2]: 2

user@s1030:~$ ls -l /dev/disk/by-uuid
итого 0
lrwxrwxrwx 1 root root 10 июл 17 14:52 20088d8a-7dfc-498d-aa69-0a3bb715b5f2 -> ../../sdb1
lrwxrwxrwx 1 root root 10 июл 17 14:52 9b807469-5ffe-4c4a-8054-f4df5ff603c0 -> ../../sda1



$ sudo nano /etc/fstab
Добавить:
UUID=20088d8a-7dfc-498d-aa69-0a3bb715b5f2 /mnt/sdb ext4 defaults 0 0
Сохранить.
$ sudo reboot
-------------------------------------------------------------------------------------------------------------

пятница, 13 июля 2018 г.

Установка 1С 8.3.12.1529 СУБД PostgreSQL версия 9.6.7.1-1C ubuntu 16.04.4

данной статье опишем установку сервера и клиента 1С 8.3.10.2650 с СУБД PostgreSQL версия 9.6.5-4.1С на ubuntu 16.04.3 на virtualbox.
Нам потребуется (все 64 бит):
1. ubuntu 16.04.4
2. 1С берем на сайте 8.3.12.1529 при наличии договора ИТС
3. PostgreSQL версия 9.6.7.1-1C дистрибутивдополнительные модули  при наличии договора ИТС 
4.  Фонты берем etersoft по кнопке получить (после бесплатной регистрации wine.local для ubuntu 16.04 64 бит)
5. Драйверы hasp берем etersoft

1. Устанавливаем ubuntu 16.04.3 desktop без swap файла, т.е. размечаем вручную весь диск ext4 root.
Настройки виртуальной машины - RAM (32GB)
Сеть - сетевой мост.

Проще всего пробросить в виртуальную машину лицензии 1С:Предприятия 8 посредством локального hasp.


Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера любое, позже мы его сменим скриптом, как и ip адрес.

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

$ lsusb
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Пробросить hasp средствами VirtualBox

$ lsusb
Bus 001 Device 004: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 003: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

2. Настройка сети скриптом.
Узнаем ip и имя адаптера
$ ip a
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:53:b6:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.169/24 brd 192.168.0.255 scope global enp0s3

Откроем firefox (в ubuntu), откроем эту страничку  и скопируем в буфер скрипт настройки сети:

$ nano network.sh

Скопируем из буфера следующий скрипт, в котором Вам нужно исправить ip, адрес шлюза и имя адаптера в соответствии со своей сетью:

#!/bin/bash
# настройка ip и hostname
#----------------------------------------------------------------------
_hostname="ufo"
# real computer
#_iface="enp0s31f6"
# kvm iface
#_iface="ens3"
# virtualbox iface
_iface="enp0s3"
#_iface="enp1s0"
_address="192.168.0.202"
_gateway="192.168.0.1"
_netmask="255.255.255.0"
_nameserver="8.8.8.8"
#----------------------------------------------------------------------
#add a swap file to an Ubuntu 16.04
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo cp /etc/fstab /etc/fstab.bak
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# отключим сетевой менеджер
#sudo systemctl stop NetworkManager.service
#sudo systemctl disable NetworkManager.service
# настроим статический ip
sudo cat > /tmp/interfaces <<EOF
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#auto $_iface
#iface $_iface inet dhcp
iface $_iface inet static
address $_address
netmask $_netmask
gateway $_gateway
dns-nameservers $_nameserver
auto $_iface
EOF
sudo cp /tmp/interfaces /etc/network
#sudo rm /etc/resolv.conf
#sudo /bin/su -c "echo 'nameserver $_nameserver' > /etc/resolv.conf"
# изменим hostname и ip
sudo cat > /tmp/hosts <<EOF
127.0.0.1       localhost
$_address       $_hostname
EOF
sudo cp /tmp/hosts /etc
# изменим hostname
sudo hostname $_hostname
sudo /bin/su -c "echo $_hostname > /etc/hostname"
# отключим ip6
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
#sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.swappiness=0' >> /etc/sysctl.conf"
#sudo /bin/su -c "echo 'vm.vfs_cache_pressure = 50' >> /etc/sysctl.conf"
sudo sysctl -p
# перезагрузим сеть
sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport
# Настройка ftp пользователь: test пароль: test
sudo apt install pure-ftpd -y
sudo groupadd ftpgroup
sudo usermod -aG ftpgroup user
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
sudo mkdir /home/user/test
sudo chown -R user:ftpgroup /home/user/test
#sudo pure-pw useradd test -u user -d /home/user/test
# Заведем пользователя ftp test с паролем test
sudo echo -e "test\ntest\n" | sudo pure-pw useradd test -u user -d /home/user/test
sudo pure-pw mkdb
sudo service pure-ftpd restart
# ubuntu
# Отключим службу ondemand
# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл network.sh

------------------------------------------
Сделаем исполняем
$ chmod +x network.sh

Выполним:

$ ./network.sh
------------------------------------------
или так:
$  sudo sh network.sh
------------------------------------------

Перезагрузимся

$ sudo reboot

3. Установка СУБД PostgreSQL версия 9.6.5-4.1С и 1c скриптом:

После перезагрузки по сети можно подключиться любым ftp клиентом к ftp серверу на нашей виртуальной машине (по ip или или имени ud1604) пользователь test пароль test и загрузить файлы установки:

Файлы необходимые для установки (предварительно нужно скачать по указанным в начале статьи ссылкам):
postgresql_9.6.7_1.1C_amd64_addon_deb.tar.bz2
postgresql_9.6.7_1.1C_amd64_deb.tar.bz2
deb64.tar.gz  #переименуем так 64 битный сервер для deb
client.deb64.tar.gz #переименуем так 64 битный клиенте для deb
fonts-ttf-ms_1.0-eter4ubuntu_all.deb
haspd_7.60-eter1debian_amd64.deb
haspd-modules_7.60-eter1debian_amd64.deb

Исправим bug
Several regex warnings when installing latest postgres update

sudo nano /usr/sbin/pam_getenv
строка 78 заменить
$val =~ s/(?<!\\)\${([^}]+)}/$ENV{$1}||""/eg;
на
$val =~ s/(?<!\\)\$\{([^}]+)\}/$ENV{$1}||""/eg;

Откроем firefox (в ubuntu), откроем эту страничку  и скопируем в буфер скрипт установки СУБД PostgreSQL версия 9.6.5-4.1С и 1c:

$ nano install_post967_1.sh

Скопируем из буфера следующий скрипт:

#!/bin/sh
sudo apt-get install libicu55 postgresql-common -y
sudo cp /usr/share/hunspell/ru_RU.aff  /usr/share/hunspell/ru_RU.aff.copy
sudo sed -e '1s/^\xef\xbb\xbf//' /usr/share/hunspell/ru_RU.aff
mkdir -p /tmp/post
cp /home/user/test/postgresql_9.6.7_1.1C_amd64_deb.tar.bz2 /tmp/post/
cp /home/user/test/postgresql_9.6.7_1.1C_amd64_addon_deb.tar.bz2 /tmp/post/
cd /tmp/post
tar -xvf postgresql_9.6.7_1.1C_amd64_deb.tar.bz2
cd postgresql-9.6.7-1.1C_amd64_deb
sudo dpkg -i *.deb
cd /tmp/post/
tar -xvf postgresql_9.6.7_1.1C_amd64_addon_deb.tar.bz2
cd postgresql-9.6.7-1.1C_amd64_addon_deb
sudo dpkg -i *.deb
sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
sudo cp /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf.bak
# установка 1с
mkdir -p /tmp/1ctmp
cd /tmp/1ctmp
sudo apt install imagemagick -y
sudo apt install -y unixodbc libgsf-1-114 libglib2.0
#ubuntu
#sudo apt install ttf-mscorefonts-installer -y
#debian
#wget  http://ftp.ru.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.6_all.deb
sudo  apt install -y xfonts-utils cabextract
#sudo dpkg -i ttf-mscorefonts-installer_3.6_all.deb
# фонты от Etersoft
#ubuntu
cp /home/user/test/fonts-ttf-ms_1.0-eter4ubuntu_all.deb /tmp/1ctmp
sudo dpkg -i fonts-ttf-ms_1.0-eter4ubuntu_all.deb
sudo apt -f -y install
#debian
#cp /home/user/Загрузки/fonts-ttf-ms_1.0-eter4debian_all.deb /tmp/1ctmp
#sudo dpkg -i fonts-ttf-ms_1.0-eter4debian_all.deb
cp /home/user/test/deb64.tar.gz /tmp/1ctmp
cp /home/user/test/client.deb64.tar.gz /tmp/1ctmp
tar xvzf deb64.tar.gz
tar xvzf client.deb64.tar.gz
sudo dpkg -i 1c*.deb
sudo apt -f -y install
sudo chown -R usr1cv8:grp1cv8 /opt/1C
sudo echo -e "pass\npass\n" | sudo passwd usr1cv8
sudo service srv1cv83 start
#sudo service srv1cv83 status
sudo  apt install -y libc6-i386
mkdir /tmp/hasp
cd /tmp/hasp
#cp /home/user/test/haspd_7.60-eter1debian_amd64.deb /tmp/hasp
#cp /home/user/test/haspd-modules_7.60-eter1debian_amd64.deb /tmp/hasp
cp /home/user/test/haspd_7.60-eter1ubuntu_amd64.deb /tmp/hasp
cp /home/user/test/haspd-modules_7.60-eter1ubuntu_amd64.deb /tmp/hasp
#wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Debian/8/haspd_7.60-eter1debian_amd64.deb
#wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/16.04/haspd_7.40-eter10ubuntu_amd64.deb
#wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Debian/8/haspd-modules_7.60-eter1debian_amd64.deb
#wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/16.04/haspd-modules_7.40-eter10ubuntu_amd64.deb
sudo dpkg -i *.deb
sudo apt-get install -f -y
sudo service haspd start
#sudo service haspd status
#sudo shutdown -r now

Сохраним файл install_post967_1.sh

Сделаем исполняем
$ chmod +x  install_post967_1.sh

Выполним:

$ ./install_post967_1.sh

или
$ sudo sh install_post967_1.sh
Не встал скриптом imagemagick?
Без строчки ниже будет ругаться при входе в 1с
$ sudo apt-get install imagemagick  -y

$ sudo reboot

$ sudo systemctl status postgresql.service
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Ср 2018-03-14 16:45:43 MSK; 7min ago
  Process: 1430 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 1430 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0
   CGroup: /system.slice/postgresql.service

мар 14 16:45:43 kamin systemd[1]: Starting PostgreSQL RDBMS...
мар 14 16:45:43 kamin systemd[1]: Started PostgreSQL RDBMS.
user@kamin:~$

$ sudo ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*                   users:(("postgres",pid=1269,fd=6))
  
$ sudo systemctl start postgresql.service
$ sudo systemctl restart postgresql.service
$ sudo systemctl stop postgresql.service

$ sudo systemctl status srv1cv83.service
● srv1cv83.service - LSB: Starts and stops the 1C:Enterprise daemons
   Loaded: loaded (/etc/init.d/srv1cv83; bad; vendor preset: enabled)
   Active: active (exited) since Ср 2018-03-14 16:45:46 MSK; 11min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1215 ExecStart=/etc/init.d/srv1cv83 start (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0

мар 14 16:45:41 kamin systemd[1]: Starting LSB: Starts and stops the 1C:Enterprise daemons...
мар 14 16:45:41 kamin su[1267]: Successful su for usr1cv8 by root
мар 14 16:45:41 kamin su[1267]: + ??? root:usr1cv8
мар 14 16:45:41 kamin su[1267]: pam_unix(su:session): session opened for user usr1cv8 by (uid=0)
мар 14 16:45:46 kamin srv1cv83[1215]: Starting 1C:Enterprise 8.3 server: OK
мар 14 16:45:46 kamin systemd[1]: Started LSB: Starts and stops the 1C:Enterprise daemons.




$ sudo ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*                   users:(("rphost",pid=1402,fd=23))
LISTEN     0      128          *:1540                     *:*                   users:(("rphost",pid=1402,fd=15),("ragent",pid=1305,fd=15))
LISTEN     0      128          *:1541                     *:*                   users:(("rmngr",pid=1325,fd=12))
LISTEN     0      128         :::1560                    :::*                   users:(("rphost",pid=1402,fd=22))
LISTEN     0      128         :::1540                    :::*                   users:(("rphost",pid=1402,fd=14),("ragent",pid=1305,fd=14))
LISTEN     0      128         :::1541                    :::*                   users:(("rmngr",pid=1325,fd=11))      

$ sudo poweroff
$ sudo poweroff

Здесь полезно сделать "консервы".
До подключения базы 1с легко менять ip адрес и название сервера.
Сделаем выгрузку post967.ova

Перезагрузимся, если не делали выгрузку или просто загрузим виртуалку.


Можно подключать базу 1С postgres пароль pass
(вместо astra имя своего сервера)



Для 32 Gb RAM иначе не запустится!!!

sudo cp  /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/9.6/main/postgresql.conf.bak 
sudo nano  /etc/postgresql/9.6/main/postgresql.conf

Заменить:

#------------------------------------------------------------------------------
data_directory = '/var/lib/postgresql/9.6/main'        # use data in another directory
hba_file = '/etc/postgresql/9.6/main/pg_hba.conf'    # host-based authentication file
ident_file = '/etc/postgresql/9.6/main/pg_ident.conf'    # ident configuration file
external_pid_file = '/var/run/postgresql/9.6-main.pid'            # write an extra PID file
listen_addresses = '*'        # what IP address(es) to listen on;
port = 5432                # (change requires restart)
max_connections = 1000            # (change requires restart)
unix_socket_directories = '/var/run/postgresql'    # comma-separated list of directories
ssl = false                # (change requires restart)
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'        # (change requires restart)
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'        # (change requires restart)
#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------
#shared_buffers = 128MB            # min 128kB
shared_buffers = 12288MB
#temp_buffers = 8MB                     # min 800kB
temp_buffers = 32MB
#work_mem = 4MB                         # min 64kB
work_mem = 32MB
#maintenance_work_mem = 64MB            # min 1MB
maintenance_work_mem = 512MB
dynamic_shared_memory_type = posix    # the default is the first option
#max_files_per_process = 1000           # min 25
max_files_per_process = 24576
#shared_preload_libraries = 'online_analyze, plantuner'    # (change requires restart)
shared_preload_libraries = 'online_analyze, plantuner, auto_explain'
# - Background Writer -

#bgwriter_delay = 200ms                 # 10-10000ms between rounds
bgwriter_delay = 10ms
#bgwriter_delay = 20ms
#bgwriter_lru_maxpages = 100            # 0-1000 max buffers written/round
bgwriter_lru_maxpages = 800
#bgwriter_lru_multiplier = 2.0          # 0-10.0 multiplier on buffers scanned/round
bgwriter_lru_multiplier = 8.0

# - Asynchronous Behavior -

#effective_io_concurrency = 1           # 1-1000; 0 disables prefetching
effective_io_concurrency =  2
#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------
#wal_level = minimal                    # minimal, replica, or logical
wal_level = hot_standby
fsync = on                             # flush data to disk for crash safety
#synchronous_commit = on                # synchronization level;
synchronous_commit = off
#commit_delay = 0                       # range 0-100000, in microseconds
commit_delay = 1000
#checkpoint_completion_target = 0.5     # checkpoint target duration, 0.0 - 1.0
checkpoint_completion_target = 0.9

#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------
#max_wal_senders = 0            # max number of walsender processes
max_wal_senders = 4
#wal_keep_segments = 0          # in logfile segments, 16MB each; 0 disables
wal_keep_segments = 1024
#------------------------------------------------------------------------------
# QUERY TUNING
#------------------------------------------------------------------------------
# - Planner Cost Constants -
#random_page_cost = 4.0                 # same scale as above
random_page_cost =  2.0
#random_page_cost = 1.5
#cpu_operator_cost = 0.0025             # same scale as above
cpu_operator_cost = 0.0005
#effective_cache_size = 4GB
effective_cache_size = 12288MB

from_collapse_limit = 20
join_collapse_limit = 20        # 1 disables collapsing of explicit
                    # JOIN clauses
#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------

log_destination = 'stderr'        # Valid values are combinations of
logging_collector = on        # Enable capturing of stderr and csvlog
log_directory = 'pg_log'        # directory where log files are written,
#log_filename = 'postgresql-%a.log'    # log file name pattern,
log_filename = 'postgresql-%Y-%m-%d.log'
log_truncate_on_rotation = on        # If on, an existing log file with the
log_rotation_age = 1d            # Automatic rotation of logfiles will
log_rotation_size = 0        # Automatic rotation of logfiles will
#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
log_min_duration_statement = 0

# - What to Log -
#log_checkpoints = off
log_checkpoints = on
#log_connections = off
log_connections = on
#log_disconnections = off
log_disconnections = on
#log_line_prefix = '%t [%p-%l] %q%u@%d '                        # special values:
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
#log_lock_waits = off                   # log lock waits >= deadlock_timeout
log_lock_waits = on
log_statement = 'none'                  # none, ddl, mod, all
#log_temp_files = -1                    # log temporary files equal or larger
log_temp_files = 0
log_timezone = 'W-SU'
#------------------------------------------------------------------------------
# RUNTIME STATISTICS
#------------------------------------------------------------------------------
stats_temp_directory = '/var/run/postgresql/9.6-main.pg_stat_tmp'

#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------

autovacuum = on            # Enable autovacuum subprocess?  'on'
#log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and
log_autovacuum_min_duration = 0
#autovacuum_max_workers = 3             # max number of autovacuum subprocesses
autovacuum_max_workers =  4
#autovacuum_naptime = 1min              # time between autovacuum runs
autovacuum_naptime = 20s
#autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum
autovacuum_vacuum_scale_factor = 0.02
#autovacuum_analyze_scale_factor = 0.1  # fraction of table size before analyze
autovacuum_analyze_scale_factor = 0.01
#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

datestyle = 'iso, dmy'
timezone = 'W-SU'
lc_messages = 'ru_RU.UTF-8'            # locale for system error message
lc_monetary = 'ru_RU.UTF-8'            # locale for monetary formatting
lc_numeric = 'ru_RU.UTF-8'            # locale for number formatting
lc_time = 'ru_RU.UTF-8'                # locale for time formatting
default_text_search_config = 'pg_catalog.russian'
#------------------------------------------------------------------------------
# LOCK MANAGEMENT
#------------------------------------------------------------------------------
#max_locks_per_transaction = 150        # min 10
max_locks_per_transaction =  256
#------------------------------------------------------------------------------
# VERSION/PLATFORM COMPATIBILITY
#------------------------------------------------------------------------------
# - Previous PostgreSQL Versions -
#escape_string_warning = on
escape_string_warning = off
#standard_conforming_strings = on
standard_conforming_strings = off
#------------------------------------------------------------------------------
# ERROR HANDLING
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# CONFIG FILE INCLUDES
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------

#online_analyze.threshold = 50
online_analyze.threshold = 500
#online_analyze.scale_factor = 0.1
online_analyze.scale_factor = 0.3
online_analyze.enable = off
online_analyze.verbose = off
online_analyze.local_tracking = on
online_analyze.min_interval = 10000
online_analyze.table_type = 'temporary'
plantuner.fix_empty_table = on
#------------------------------------------------------------------------------

Сохранить.

$ sudo systemctl restart postgresql.service
$ sudo systemctl restart srv1cv83.service 
.
$ nano changeip.sh

Скопируем из буфера следующий скрипт, в котором Вам нужно исправить ip и адрес шлюза в соответствии со своей сетью:

#!/bin/bash
# настройка ip и hostname
#----------------------------------------------------------------------
_hostname="kamin"
# real computer
#_iface="enp0s31f6"
# kvm iface
#_iface="ens3"
# virtualbox iface
#_iface="enp0s3"
_iface="enp1s0"
_address="192.168.1.95"
_gateway="192.168.1.1"
_netmask="255.255.255.0"
_nameserver="8.8.8.8"
#----------------------------------------------------------------------
# настроим статический ip
sudo cat > /tmp/interfaces <<EOF
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#auto $_iface
#iface $_iface inet dhcp
iface $_iface inet static
address $_address
netmask $_netmask
gateway $_gateway
dns-nameservers $_nameserver
auto $_iface
EOF
sudo cp /tmp/interfaces /etc/network#sudo rm /etc/resolv.conf
#sudo /bin/su -c "echo 'nameserver $_nameserver' > /etc/resolv.conf"
# изменим hostname и ip
sudo cat > /tmp/hosts <<EOF
127.0.0.1       localhost
$_address       $_hostname
EOF
sudo cp /tmp/hosts /etc
# изменим hostname
sudo hostname $_hostname
sudo /bin/su -c "echo $_hostname > /etc/hostname"
# перезагрузим сеть
sudo systemctl restart networking.service

Сохраним файл changeip.sh

Сделаем исполняем
$ chmod +x changeip.sh

Выполним:

$ ./changeip.sh

Pgadmin4 регламентные ежедневные операции

воскресенье, 1 июля 2018 г.

Binance

https://api.binance.com/api/v1/trades?symbol=BTCUSDT
https://bablofil.ru/binance-api/

#sql_pol.1.4.py
#import numpy
#import talib
import requests
import json
import time
import calendar
#import mysql.connector
import sys
from datetime import datetime
#from matplotlib.finance import candlestick2_ohlc
#i#mport matplotlib.animation as animation
#import matplotlib.pyplot as plt
#import matplotlib.ticker as ticker
#from datetime import datetime
#import pandas as pd



def get_binance():   
    global st_time
    global end_time
    pair = 'USDT_BTC'
    time.sleep(0.2)
    #chart_data={}
    #manual http://docs.python-requests.org/en/master/user/advanced/#request-and-response-objects
    while True:
        try:
            response  = requests.get('https://api.binance.com/api/v1/trades?symbol=BTCUSDT')
            if response.status_code == 200:
                break
            else:
                #log('response.status_code =', response.status_code)
                pass
        except Exception as e:
            #log(e)
            pass
    chart_data = json.loads(response.text)
    return chart_data


def get_signalb():
    global st_time
    global end_time
    DEBUG = False
    #DEBUG = True
    if DEBUG:
###############################################################
#Для тестирования время UTC последниее несколько минут (500 сделок)
#https://www.coinigy.com/main/markets/BINA/BTC/USDT
# на https://www.binance.com/ru/trade/BTC_USDT время Московское!
        #time_start = (2018, 6, 29, 22, 24, 0, 0, 0, 0)
        #time_start = (2018, 7, 2, 11, 8, 0, 0, 0, 0)
        time_start = (2018, 7, 2, 16, 24, 0, 0, 0, 0)
#timestampstart = time.mktime(time_start)-3*60*60 #Время UTC
#timestampstart = time.mktime(time_start) #Локальное время
        timestampstart = calendar.timegm(time_start) # время UTC
        st_time=int(timestampstart)
        print(st_time)
        print('Начало теста', datetime.utcfromtimestamp(st_time))
        #time_end = (2018, 6, 29, 22, 25, 0, 0, 0, 0) #Время UTC
        #time_end = (2018, 7, 2, 11, 9, 0, 0, 0, 0) #Время UTC
        time_end = (2018, 7, 2, 16, 25, 0, 0, 0, 0) #Время UTC
#timestampend = time.mktime(time_end)-3*60*60
#timestampend = time.mktime(time_end) #Локальное время
        timestampend = calendar.timegm(time_end) # время UTC
        end_time = int(timestampend)
        print(end_time)
        print('Конец теста', datetime.utcfromtimestamp(end_time))

###############################################################
    else:
################################################################
# Для бота
        x = int(datetime.now().timestamp())
        end_time = x
        x = x - 60
        st_time = x
        print('Время начала ', datetime.utcfromtimestamp(st_time), st_time)
        print('Время конца ', datetime.utcfromtimestamp(end_time), end_time)
    chart_data = get_binance()
    dict = chart_data
    data = []
    for index, elems in enumerate(dict):
        dict[index]['time'] = int(dict[index]['time']/1000)
        #data.append(elems)
        if dict[index]['time'] >= st_time and dict[index]['time'] < end_time:
            data.append(elems)
    dict =  data
    #print(dict)
    vbuy = 0
    vsell = 0
    high = 0
    low =  float(dict[0]['price'])
    open = float(dict[0]['price'])
    close = float(dict[-1]['price'])
    for index, elems in enumerate(dict):
        if dict[index]['isBuyerMaker']:
            vbuy = vbuy + float(dict[index]['qty'])
            #vsell = vsell + float(dict[index]['qty'])
        else:
            #vbuy = vbuy + float(dict[index]['qty'])
            vsell = vsell + float(dict[index]['qty'])
        if float(dict[index]['price']) > high:
            high = float(dict[index]['price'])
        if float(dict[index]['price']) < low:
            low = float(dict[index]['price'])
    buy = False
    sell = False
    if vbuy > 2 * vsell and vbuy > 10:
        buy =True
    if vsell > 2 * vbuy and vsell > 10:
        sell =True
    #print(dict)
    print('Начало базы', datetime.utcfromtimestamp(int(dict[0]['time'])),int(dict[0]['time']))
    print('Конец базы', datetime.utcfromtimestamp(int(dict[-1]['time'])),int(dict[-1]['time']))
    return (
           {
           'buy':buy, 'sell':sell,'open':open,'close':close,'high':high,'low':low,
           'vbuy':vbuy, 'vsell':vsell
           }
           )
signal = get_signalb()
print(signal)

Для polo

#sql_pol.1.4.py
#import numpy
#import talib
import requests
import json
import time
import calendar
#import mysql.connector
import sys
from datetime import datetime
#from matplotlib.finance import candlestick2_ohlc
#i#mport matplotlib.animation as animation
#import matplotlib.pyplot as plt
#import matplotlib.ticker as ticker
#from datetime import datetime
#import pandas as pd



def get_polo():   
    global st_time
    global end_time
    pair = 'USDT_BTC'
    time.sleep(0.2)
    #chart_data={}
    #manual http://docs.python-requests.org/en/master/user/advanced/#request-and-response-objects
    while True:
        try:
            #log('requests.get')
            #response  = requests.get('https://poloniex.com/public?command=returnTradeHistory&currencyPair=%s&start=%s&end=%s' % (pair,st_time,end_time), timeout = None)
            response  = requests.get('https://poloniex.com/public?command=returnTradeHistory&currencyPair=%s&start=%s&end=%s' % (pair,st_time,end_time), timeout = 5)
            #log('response.status_code =', response.status_code)
            if response.status_code == 200:
                break
            else:
                #log('response.status_code =', response.status_code)
                pass
        except Exception as e:
            #log(e)
            pass
    chart_data = json.loads(response.text)
    return chart_data


def get_signal():
    global st_time
    global end_time
    #DEBUG = False
    DEBUG = True
    if DEBUG:
###############################################################
#Для тестирования
        #time_start = (2018, 6, 29, 22, 24, 0, 0, 0, 0)
        time_start = (2018, 6, 30, 22, 53, 0, 0, 0, 0)
#timestampstart = time.mktime(time_start)-3*60*60 #Время UTC
#timestampstart = time.mktime(time_start) #Локальное время
        timestampstart = calendar.timegm(time_start) # время UTC
        st_time=int(timestampstart)
        print(st_time)
        #time_end = (2018, 6, 29, 22, 25, 0, 0, 0, 0) #Время UTC
        time_end = (2018, 6, 30, 22, 54, 0, 0, 0, 0) #Время UTC
#timestampend = time.mktime(time_end)-3*60*60
#timestampend = time.mktime(time_end) #Локальное время
        timestampend = calendar.timegm(time_end) # время UTC
        end_time = int(timestampend)
        print(end_time)
###############################################################
    else:
################################################################
# Для бота
        dt = datetime.utcnow()
        print(dt)
        dtt = dt.timetuple()
        #print(dtt)
        x = int(time.mktime(dtt)) + 3600 * 3
        print(x)
        print(datetime.fromtimestamp(x))
        end_time = x
        x = x - 60
        print(x)
        print(datetime.fromtimestamp(x))
        st_time = x
    chart_data = get_polo()
    dict = chart_data
    vbuy = 0
    vsell = 0
    high = 0
    low =  float(dict[-1]['rate'])
    open = float(dict[-1]['rate'])
    close = float(dict[0]['rate'])
    for index, elems in enumerate(dict):
        if dict[index]['type'] == 'buy':
            vbuy = vbuy + float(dict[index]['amount'])
        if dict[index]['type'] == 'sell':
            vsell = vsell + float(dict[index]['amount'])
        if float(dict[index]['rate']) > high:
            high = float(dict[index]['rate'])
        if float(dict[index]['rate']) < low:
           low = float(dict[index]['rate'])
    buy = False
    sell = False
    if vbuy > 2 * vsell and vbuy > 10:
        buy =True
    if vsell > 2 * vbuy and vsell > 10:
        sell =True
    return (
           {
           'buy':buy, 'sell':sell,'open':open,'close':close,'high':high,'low':low,
           'vbuy':vbuy, 'vsell':vsell
           }
           )

signal = get_signal()
print(signal)