connect_timeout=600
wait_timeout=600
interactive_timeout=600
Timeouts в MySQL
Добавляем в /etc/my.cnf чтобы завершались залипшие запросы
Apache нагрузка подключения
Просмотр числа подключений на 80 порт
Установка netstat на CentOS 7
25 самых активных IP
25 самых популярных URL
netstat -na --inet | grep ":80\ " | awk '{print $5}' | cut -d":" -f 1 | sort | uniq -c | sort -nr
ss -o '( dport = :http or sport = :http )' | awk '{print $6}' | cut -d : -f 1 | grep -v 'Address' | sort | uniq -c | sort -n
Установка netstat на CentOS 7
yum install net-tools
25 самых активных IP
cat /var/www/httpd-logs/*access.log | awk '{ print $1 ; }' | sort | uniq -c | sort -n -r | head -n 25
25 самых популярных URL
cat /var/www/httpd-logs/*access.log | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25
PHP Selector CloudLinux выбор версии PHP
Официальная документация: http://docs.cloudlinux.com/
Включить CageFS
Посмотреть какие PHP есть
Включить PHP нужной версии
Добавить расширение глобально (почему-то для существующих не добавляет даже force update)
Посмотреть какие расширения есть
Включить для юзера
Изменяем какое-либо значение для пользователя
Если такое не срабатывает с ошибкой вида
ERROR:No ‘apc.shm_size’ option in white list!
то можно назначать редактированием файла конфига из под юзера по ssh:
Включить CageFS
# cagefsctl --enable user253696
# cagefsctl --force update
Посмотреть какие PHP есть
# cl-selector --list=php
Включить PHP нужной версии
# cl-selector --select=php --version 5.3 --user user2536967
Добавить расширение глобально (почему-то для существующих не добавляет даже force update)
# selectorctl --enable-extensions=zend_optimizer --version=5.2
Посмотреть какие расширения есть
# cl-selector --list-extensions=php --version 5.2
Включить для юзера
# selectorctl --enable-user-extensions=zend_optimizer --version=5.2 --user=user2533184
Изменяем какое-либо значение для пользователя
/usr/bin/piniset -r 'magic_quotes_gpc:off' -u user2536967
Если такое не срабатывает с ошибкой вида
ERROR:No ‘apc.shm_size’ option in white list!
то можно назначать редактированием файла конфига из под юзера по ssh:
su userXXXX
bash-4.1$ php --ini|grep parsed
Additional .ini files parsed: /opt/alt/php54/etc/php.d/alt_php.ini
vi /opt/alt/php54/etc/php.d/alt_php.ini
Удалить директорию в которой содержатся миллионы файлов, очистить каталог php сессий
Если find зависает на огромном числе файлов, то используйте функцию unlink, например, вот простой однострочник на perl
Данная команда удаляет в среднем один миллион файлов в час.
perl -e 'chdir "mod-tmp" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
Данная команда удаляет в среднем один миллион файлов в час.
При большой нагрузке на дисковую систему можно понизить приоритет i/o указав ionice -c2 -n7 вначале команды перед perl
Чтобы не забивался каталог сессиями следует произвести настройку в php.ini
Чтобы не забивался каталог сессиями следует произвести настройку в php.ini
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
PHP скрипт в режиме как CGI не работает дольше 60 секунд — Timeout waiting for output from CGI script
PHP скрипт не смотря на настройки max_execution_time в php.ini завершает свою работу через 60 секунд выдавая ошибку в лог-файл apache
Решение:
Необходимо прописать в /etc/httpd/conf/httpd.conf директиву
(где 300 — число секунд которые сможет выполняться данный скрипт)
По-умолчанию в CentOS 7 эта директива не прописана и равна 60 секундам
Чтобы nginx (если используется) при этом не выдавал ошибку 502 следует также прописать в его конфигурации
Timeout waiting for output from CGI script /var/www/user/data/php-bin/php
Решение:
Необходимо прописать в /etc/httpd/conf/httpd.conf директиву
Timeout 300
(где 300 — число секунд которые сможет выполняться данный скрипт)
По-умолчанию в CentOS 7 эта директива не прописана и равна 60 секундам
Чтобы nginx (если используется) при этом не выдавал ошибку 502 следует также прописать в его конфигурации
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
Как распаковать архив который создан при помощи isptar (архиватора который используется в ISPmanager)
/usr/local/mgr5/sbin/isptar -x F2016-10-18.www-root.tgz data/www/example.com/ -R backup/
Данная команда извлекает из архива за 18.10.2016 пользователя www-root каталог с файлами сайта example.com в папку backup
inputrc, tab и игнорирование регистра символов
Совет дня — используйте в консоли автодополнение с игнорированием между прописными и строчными буквами
B итоге при автодополнении табом в cd documents будем попадать в Documents, попробуйте, это удобно
Файл /etc/inputrc используется Readline — библиотекой ввода и считывается при запуске Bash и большей частью других оболочек.
За более подробной информацией по редактированию файла inputrc , прочтите секцию Readline Init File на странице info bash. Также хорошим источником информации является info readline.
$ echo "set completion-ignore-case on" >> ~/.inputrc
B итоге при автодополнении табом в cd documents будем попадать в Documents, попробуйте, это удобно
Файл /etc/inputrc используется Readline — библиотекой ввода и считывается при запуске Bash и большей частью других оболочек.
За более подробной информацией по редактированию файла inputrc , прочтите секцию Readline Init File на странице info bash. Также хорошим источником информации является info readline.
Перенос CentOS 6.8 на программный RAID1 mdadm
В данной статье пойдет речь как быстро перенести операционную систему CentOS 6 которая установлена на один жесткий диск на программный RAID на двух дисках (mdraid)
Руководств по переводу можно найти в сети много разных, однако, не все они «запускаются» с первого раза или являются неправильными (ситуация «делал все как написано и оно не работает»)
Также при использовании grub1 существует недостаток в связи с тем, что не всегда удается загрузиться в случае выхода из строя одного из дисков и необходимо в grub указывать root устройство правкой в загрузчке (root (hd0,0)) или же переставлять диск местами.
Это действительно издержки данной системы http://www.linux.org.ru/forum/admin/9417685?cid=9421016
Также, как показывает огромная практика различные вещи как LVM, разбивка на несколько разделов просто напросто не нужны, поэтому просто разбиваем на один раздел, swap же также сделаем в файле (тем самым будет преимущество в виде возможности менять его размер при необходимости)
И так, как же перенести CentOS 6 на программный RAID
Для этого подключаем второй чистый жесткий диск такого же объема (в системе он будет называться sdb) и разметим его используя fdisk
Всё по-умолчанию, единственное, что сделаем, так это отступим на один цилиндр сначала (разобьем со второго цилиндра) на случай если будет необходимость в будущем мигрировать на загрузчик grub2 так как он просто «не войдет» в один цилиндр
[
Теперь создаем raid 1 на этом разделе
Обязательно использовать формат метаданных 0.90, так как с более новыми grub 0.97 не работает на /boot разделе
Формируем конфигурационной файл mdadm /etc/mdadm.conf
[root@centos6 ~]# mdadm --detail --scan > /etc/mdadm.conf
Внесите правку в /boot/grub/device.map — добавьте туда наш sdb как hd1
[
Форматируем устройство md0 в ext4
Монтируем новосозданный /dev/md0 в /mnt
Копируем все данные на него (предварительно следует остановить на машине все сервисы которые могут писать файлы на диск, такие как mysql, веб-сервер)
Правим /mnt/etc/fstab делая там только монтирование md0, монтировать следует по UUID- смотрим его командой blkid
[
Вносим правки в /mnt/boot/grub/grub.conf в строку kernel выставляя правильное устройство (root=) и убирая rd_NO_DM rd_NO_MD и аналогичные параметры, я рекомендую убрать все лишние опции чтобы видеть вывод при загрузке
root у нас на md0, смотрим его uuid командой blkid | grep md0
Желательно указывать также rd_MD_UUID — его можно посмотреть в /etc/mdadm.conf
Путь к kernel и initrd теперь начинается с /boot/ — также не забываем это исправить
Устройство root следует указать (hd1,0)
Пересобирите initramfs на новом диске отключив в нем поддержку LVM (у нас система ставилась по-умолчанию с lvm и не нужно чтобы он монтировался)
Пропишите grub bootcode на второй диск
Если в системе включен selinux, то необходимо создать файл /.autorelabel в новой системе
Иначе не сможете войти в систему с ошибкой Unable to get valid context for root
Теперь необходимо перезагрузить сервер и выбрать в BIOS загрузку со второго жесткого диска
* после выполнения relabel система автоматически перезагрузится, следите за загрузкой
После чего зайти в систему и убедиться что все в порядке, система загружена с нужного нам устройства
[
Также не должно показывать никаких подмонтированых lvm разделов
Если вы видете примонтированый lvm — значит вы загрузились с первого, а не второго диска, перезагрузите сервер и убедитесь что именно нужный диск выбран
Просто отлично, система загружена и работает с нужного нам устройства
Теперь осталось немного — сделать копию разделов с диска sdb на диск sda
В моем случае на сервере был LVM и вначале необходимо удалить устройства
Затем обнулить таблицу разделов
И сделать копию таблицы разделов
Команда должна выполниться без ошибок, именно поэтому важно предварительно почистить диск
Добавляем диск в зеркало
Убеждаемся что зеркало собирается
Ставим загрузчик на sda (тут может потребоваться немного подождать пока синхронизируется начальная часть зеркала)
Также создаем swap в файле, скажем 2Gb (это уже опционально)
Подключаем его в /etc/fstab
Можно перезагрузиться чтобы убедиться что все работает
После чего меняем в /boot/grub/grub.conf строку
на
Чтобы если в сервере останется один диск система могла загрузиться
Работы на этом завершены
Руководств по переводу можно найти в сети много разных, однако, не все они «запускаются» с первого раза или являются неправильными (ситуация «делал все как написано и оно не работает»)
Также при использовании grub1 существует недостаток в связи с тем, что не всегда удается загрузиться в случае выхода из строя одного из дисков и необходимо в grub указывать root устройство правкой в загрузчке (root (hd0,0)) или же переставлять диск местами.
Это действительно издержки данной системы http://www.linux.org.ru/forum/admin/9417685?cid=9421016
Также, как показывает огромная практика различные вещи как LVM, разбивка на несколько разделов просто напросто не нужны, поэтому просто разбиваем на один раздел, swap же также сделаем в файле (тем самым будет преимущество в виде возможности менять его размер при необходимости)
И так, как же перенести CentOS 6 на программный RAID
Для этого подключаем второй чистый жесткий диск такого же объема (в системе он будет называться sdb) и разметим его используя fdisk
Всё по-умолчанию, единственное, что сделаем, так это отступим на один цилиндр сначала (разобьем со второго цилиндра) на случай если будет необходимость в будущем мигрировать на загрузчик grub2 так как он просто «не войдет» в один цилиндр
[
root@centos6 ~]# fdisk /dev/sdb
Устройство не содержит ни верной таблицы разделов DOS, ни метки диска Sun, SGI или OSF
Building a new DOS disklabel with disk identifier 0x390ed2ea.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Предупреждение: неверный флаг 0x0000 таблицы разделов 4 будет исправлен записью
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Команда (m для справки): n
Действие команды
e расширенный
p основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-1044, default 1): 2
Last цилиндр, +цилиндры or +size{K,M,G} (2-1044, default 1044):
Using default value 1044
Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)
Команда (m для справки): a
Номер раздела (1-4): 1
Команда (m для справки): w
Таблица разделов была изменена!
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
Теперь создаем raid 1 на этом разделе
[root@centos6 ~]# mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: array /dev/md0 started.
Обязательно использовать формат метаданных 0.90, так как с более новыми grub 0.97 не работает на /boot разделе
Формируем конфигурационной файл mdadm /etc/mdadm.conf
[root@centos6 ~]# mdadm --detail --scan > /etc/mdadm.conf
Внесите правку в /boot/grub/device.map — добавьте туда наш sdb как hd1
[
root@centos6 ~]# vi /boot/grub/device.map
(hd0) /dev/sda
(hd1) /dev/sdb
Форматируем устройство md0 в ext4
[root@centos6 ~]# mkfs.ext4 /dev/md0
Монтируем новосозданный /dev/md0 в /mnt
[root@centos6 ~]# mount /dev/md0 /mnt
Копируем все данные на него (предварительно следует остановить на машине все сервисы которые могут писать файлы на диск, такие как mysql, веб-сервер)
[root@centos6 ~]# yum -y install rsync
[root@centos6 ~]# rsync -avP --exclude='/dev/*' --exclude='/proc/*' --exclude='/sys/*' --exclude='/mnt/' / /mnt
Правим /mnt/etc/fstab делая там только монтирование md0, монтировать следует по UUID- смотрим его командой blkid
[
root@centos6 ~]# blkid | grep md0
[root@centos6 ~]# cp /mnt/etc/fstab /etc/fstab_bak
[root@centos6 ~]# vi /mnt/etc/fstab
UUID=d00711db-48b2-4735-9cdb-7080742797c4 / ext4 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
Вносим правки в /mnt/boot/grub/grub.conf в строку kernel выставляя правильное устройство (root=) и убирая rd_NO_DM rd_NO_MD и аналогичные параметры, я рекомендую убрать все лишние опции чтобы видеть вывод при загрузке
root у нас на md0, смотрим его uuid командой blkid | grep md0
Желательно указывать также rd_MD_UUID — его можно посмотреть в /etc/mdadm.conf
Путь к kernel и initrd теперь начинается с /boot/ — также не забываем это исправить
Устройство root следует указать (hd1,0)
[root@centos6 ~]# cp /mnt/boot/grub/grub.conf /mnt/boot/grub/grub.conf_bak
[root@centos6 ~]# vi /mnt/boot/grub/grub.conf
default=0
timeout=5
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd1,0)
kernel /boot/vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=d00711db-48b2-4735-9cdb-7080742797c4 rd_MD_UUID=b9baa472:faeb3a7c:6e31c5b6:310ac827
initrd /boot/initramfs-2.6.32-642.el6.x86_64.img
Пересобирите initramfs на новом диске отключив в нем поддержку LVM (у нас система ставилась по-умолчанию с lvm и не нужно чтобы он монтировался)
[root@centos6 ~]# dracut --nolvmconf --mdadmconf -f /mnt/boot/initramfs-`uname -r`.img `uname -r`
Пропишите grub bootcode на второй диск
grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 27 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+27 p (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
Если в системе включен selinux, то необходимо создать файл /.autorelabel в новой системе
[root@centos6 /]# touch /mnt/.autorelabel
Иначе не сможете войти в систему с ошибкой Unable to get valid context for root
Теперь необходимо перезагрузить сервер и выбрать в BIOS загрузку со второго жесткого диска
* после выполнения relabel система автоматически перезагрузится, следите за загрузкой
После чего зайти в систему и убедиться что все в порядке, система загружена с нужного нам устройства
[
root@centos6 ~]# mount
/dev/md0 on / type ext4 (rw)
[root@centos6 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
8377856 blocks super 1.0 [2/1] [_U]
[root@centos6 ~]# cat /proc/mounts
Также не должно показывать никаких подмонтированых lvm разделов
Если вы видете примонтированый lvm — значит вы загрузились с первого, а не второго диска, перезагрузите сервер и убедитесь что именно нужный диск выбран
Просто отлично, система загружена и работает с нужного нам устройства
Теперь осталось немного — сделать копию разделов с диска sdb на диск sda
В моем случае на сервере был LVM и вначале необходимо удалить устройства
[root@centos6 ~]# lvremove /dev/mapper/vg_centos6-lv_root
Do you really want to remove active logical volume lv_root? [y/n]: y
Logical volume "lv_root" successfully removed
[root@centos6 ~]# lvremove /dev/mapper/vg_centos6-lv_swap
Do you really want to remove active logical volume lv_swap? [y/n]: y
Logical volume "lv_swap" successfully removed
Затем обнулить таблицу разделов
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
И сделать копию таблицы разделов
[root@centos6 ~]# sfdisk -d /dev/sdb | sfdisk --force /dev/sda
Команда должна выполниться без ошибок, именно поэтому важно предварительно почистить диск
Добавляем диск в зеркало
[root@centos6 ~]# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1
Убеждаемся что зеркало собирается
[root@centos6 ~]# cat /proc/mdstat
Ставим загрузчик на sda (тут может потребоваться немного подождать пока синхронизируется начальная часть зеркала)
[root@centos6 ~]# grub
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
...
...
grub> quit
quit
Также создаем swap в файле, скажем 2Gb (это уже опционально)
[root@centos6 ~]# dd if=/dev/zero of=/swapfile bs=2048 count=1048576
[root@centos6 ~]# mkswap /swapfile
[root@centos6 ~]# swapon /swapfile
Подключаем его в /etc/fstab
[root@centos6 ~]# echo '/swapfile none swap sw 0 0' >> /etc/fstab
Можно перезагрузиться чтобы убедиться что все работает
После чего меняем в /boot/grub/grub.conf строку
root (hd1,0)
на
root (hd0,0)
Чтобы если в сервере останется один диск система могла загрузиться
Работы на этом завершены
flashcache и reboot - проверять в sysctl
Перед ребутом когда используется flascache необходимо проверять что для него включен fast_remove в sysctl
# sysctl -a | grep fast_remove
dev.flashcache.ata-SAMSUNG_MZ7LM960HCHP-00003_S1YHNX0H403040+md2.fast_remove = 1
Что настроить в ~/.ssh/config для улучшения работы
Казалось бы в конфигурации openssh-клиента практически всё работает как положено. Однако, все же есть опции, которые заинтересуют многих, хотя бы первая из них
StrictHostKeyChecking no - будут автоматически добавляться ключи в ~/.ssh/known_hosts и не надо будет отвечать каждый раз yes. При смене ключа оповещение сохраняется
Compression yes - включает компрессию передачи, улучшается отзывчивость работы, особенно если выводятся большие объемы данных
ServerAliveInterval 60 - каждую минуту будут отсылаться keepalive пакеты (по умолчанию не отсылаются значение 0), тем самым улучшается стабильность соединения (особенно если вы работаете за NAT и наблюдается такая проблема)
ServerAliveCountMax 2 - отсылать 2 пакета (по умолчанию 3) и если все же нет связи, через 120 секунд разрывать соединение
$ cat ~/.ssh/config
StrictHostKeyChecking no
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 2
StrictHostKeyChecking no - будут автоматически добавляться ключи в ~/.ssh/known_hosts и не надо будет отвечать каждый раз yes. При смене ключа оповещение сохраняется
Compression yes - включает компрессию передачи, улучшается отзывчивость работы, особенно если выводятся большие объемы данных
ServerAliveInterval 60 - каждую минуту будут отсылаться keepalive пакеты (по умолчанию не отсылаются значение 0), тем самым улучшается стабильность соединения (особенно если вы работаете за NAT и наблюдается такая проблема)
ServerAliveCountMax 2 - отсылать 2 пакета (по умолчанию 3) и если все же нет связи, через 120 секунд разрывать соединение
grub2 на centos 6
yum install gcc bison flex make
wget https://ftp.gnu.org/gnu/grub/grub-2.00.tar.gz
tar xf grub-2.00.tar.gz
cd grub-2.00
./configure
make
make install
/usr/local/sbin/grub-mkconfig -o /boot/grub/grub.cfg
/usr/local/sbin/grub-install /dev/sda
yum remove grub
Мной также был собран rpm-пакет для быстрой установки и отсутствия необходимости компиляции. Установка производится в каталог /opt/grub2. Пакет доступен в репозитории CentOSUP или по прямой ссылке:
yum install https://centosup.ispsystem.info/repo/x86_64/grub2-2.00-1.el6.x86_64.rpm
/opt/grub2/sbin/grub-mkconfig -o /boot/grub/grub.cfg
/opt/grub2/sbin/grub-install /dev/sda
Если у кого-либо есть репозиторий с grub2 для CentOS 6 или готовые .spec-файлы прошу поделиться в комментариях, поскольку интересует вопрос интеграции в систему вместо grub 0.99
Как собирать rpm — инструкции по сборке rpm пакетов
Способ 1. В "чистом" окружении используя mock
Распаковываем исходники в src
Билдим srpm
Компиляем rpm
В rpms получаем готовые пакеты
Способ 2. В "боевом" окружении (захламляя ОС ненужными пакетами и не исключая их влияние) используя rpmbuild
Сорцы кладем в ~/rpmbuild/SOURCES
.spec файл в ~/rpmbuild/SPECS
И компилируем сразу бинарный билд
yum install mock
adduser mock -g mock
su - mock
mkdir {src,rpms,srpms}
Распаковываем исходники в src
Билдим srpm
mock --buildsrpm --spec=src/software/software.spec --sources=src/software --resultdir=srpms
Компиляем rpm
mock --rebuild srpms/software.1.2.3.el6.src.rpm --resultdir=rpms
В rpms получаем готовые пакеты
Способ 2. В "боевом" окружении (захламляя ОС ненужными пакетами и не исключая их влияние) используя rpmbuild
yum install rpm-build gcc make
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
Сорцы кладем в ~/rpmbuild/SOURCES
.spec файл в ~/rpmbuild/SPECS
И компилируем сразу бинарный билд
cd ~/rpmbuild/SPECS
rpmbuild -bb software.spec
Перенос операционной системы образом диска по сети (dd over ssh)
Иногда возникают случаи когда нет возможности переместить физически образ диска, например, при использовании rbd, lvm или каких-либо еще случаях. Как же быть в этой ситуации?
Загрузите оба сервера в linux rescue по сети с livecd, поднимите сеть и обеспечьте ssh-доступ
На новом сервере на который выполняем перенос надо выполнить:
P.S. pv - monitor the progress of data through a pipe
dd в GNU Coreutils 8.24+ (Ubuntu 16.04) включает в себя опцию status=progress
Про оптимальный размер blocksize можно почитать тут http://stackoverflow.com/questions/6161823/dd-how-to-calculate-optimal-blocksize
Загрузите оба сервера в linux rescue по сети с livecd, поднимите сеть и обеспечьте ssh-доступ
На новом сервере на который выполняем перенос надо выполнить:
ssh root@исходныйсервер "dd if=/dev/vda bs=64k | gzip -1 -" | gunzip - | pv | dd of=/dev/vda bs=64k
P.S. pv - monitor the progress of data through a pipe
dd в GNU Coreutils 8.24+ (Ubuntu 16.04) включает в себя опцию status=progress
Про оптимальный размер blocksize можно почитать тут http://stackoverflow.com/questions/6161823/dd-how-to-calculate-optimal-blocksize
Хороший online scanner сайтов на вирусы
https://sitecheck.sucuri.net/
Free Website Malware and Security Scanner
Радует тем, что реально пробегает по всем страницам сайта и находит вирусы и seo-spam также и прочую заразу.
Дальше можно погрепать скрипты по самплу кода и исправить.
В логах веб-сервера запросы видны как
162.216.19.183 - - [12/Nov/2016:22:35:18 +0300] "GET /?page_id=2509 HTTP/1.1" 200 273407 "http://sucuri.net" "Mozilla/5.0 (compatible; MSIE 8.0; MSIE 9.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)"
Free Website Malware and Security Scanner
Радует тем, что реально пробегает по всем страницам сайта и находит вирусы и seo-spam также и прочую заразу.
Дальше можно погрепать скрипты по самплу кода и исправить.
В логах веб-сервера запросы видны как
162.216.19.183 - - [12/Nov/2016:22:35:18 +0300] "GET /?page_id=2509 HTTP/1.1" 200 273407 "http://sucuri.net" "Mozilla/5.0 (compatible; MSIE 8.0; MSIE 9.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)"
Не включается мониторинг сервиса в меню Службы в ISPmanager 5
Если все сервисы мониторятся, а у какого либо сервиса, например, у MySQL в Debian 7 упорно не включается мониторинг работы, то возможно проблема в базе данных сервисов
Решить можно следующим образом:
И делаем off чтобы было у всех одинаково:
Решить можно следующим образом:
cd /usr/local/mgr5/var/
/opt/ispsystem/sbin/sqlite3 services.db
sqlite> .explain on
sqlite> select * from services;
И делаем off чтобы было у всех одинаково:
sqlite> update services set is_mon='off';
xfreerdp параметры командной строки и скриптик
Поскольку rdesktop устаревает и есть проблемы с раскладками приходится пользоваться xfreerdp
В качестве "обертки" лучше всего использовать remmina — он установлен по-умолчанию в Ubuntu 16.04 и использует библиотеки от freerdp
Но иногда удобнее пользоваться консольной утилитой (которая использует те же библиотеки)
Синтаксис имеет немного странный вид https://github.com/FreeRDP/FreeRDP/wiki/CommandLineInterface
В итоге просто пишем скрипт ~/bin/rdp
и запускаем как
В качестве "обертки" лучше всего использовать remmina — он установлен по-умолчанию в Ubuntu 16.04 и использует библиотеки от freerdp
Но иногда удобнее пользоваться консольной утилитой (которая использует те же библиотеки)
sudo apt-get install freerdp
Синтаксис имеет немного странный вид https://github.com/FreeRDP/FreeRDP/wiki/CommandLineInterface
В итоге просто пишем скрипт ~/bin/rdp
#!/bin/sh
xfreerdp +clipboard /size:1024x768 /u:Administrator /p:$2 /v:$1
и запускаем как
rdp адрес пароль
zombie на openvz и метод нахождения процесса который зомбофицировался
Иногда бывает сбой на виртуализации OpenVZ и в итоге не удается остановить контейнер с кодом 7
Как найти виновника
В данном случае виноват systemd внутри контейнера
[root@msk-node ~]# vzctl stop 29834 --fast
Killing container ...
Child 134833 exited with status 7
Unable to stop container
Как найти виновника
[root@msk-node ~]# ps auxwww| awk '{print($2)}'| xargs vzpid| grep 29834
684597 29834 systemd
684599 29834 kthreadd/29834
684600 29834 khelper/29834
[root@msk-node ~]# ps axuw | grep 684597
root 684597 0.0 0.0 0 0 ? Zsl Nov04 2:56 [systemd]
В данном случае виноват systemd внутри контейнера
Как добиться grade A+ от sslchecker
Чтобы ssl checker https://www.ssllabs.com/ssltest/ выдавал качество A+ надо сделать следующие настройки:
https://cipherli.st/
зеркало https://dl.ispsystem.info/mirrors/cipherli.st/
https://cipherli.st/
зеркало https://dl.ispsystem.info/mirrors/cipherli.st/
Оптимизация настроек PHP под Bitrix
Для всех систем, только файл будет в другом месте в Debian-like
Создаем файл /etc/php.d/00-bitrix.ini
Создаем файл /etc/php.d/00-bitrix.ini
display_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
; Set some more PHP parameters
date.timezone = Europe/Moscow
enable_dl = Off
short_open_tag = On
allow_url_fopen = On
; Change default values of important constants
max_input_vars = 10000
max_execution_time = 300
post_max_size = 256M
upload_max_filesize = 256M
memory_limit = 256M
pcre.backtrack_limit = 1000000
pcre.recursion_limit = 10000
realpath_cache_size = 4096k
; Utf-8 support
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8
; OpCache settings
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.fast_shutdown=1
; php 7
pcre.jit=0
Nginx error 502 upstream sent too big header while reading response header from upstream
Nginx может выдавать ошибку 502 и упорно писать в логи upstream sent too big header
Исправляется прописыванием в секцию http /etc/nginx/nginx.conf
(по умолчанию 4 8/16)
Но не больше
2016/11/04 22:17:08 [error] 29848#29848: *57721 upstream sent too big header while reading response header from upstream, client: 168.112.124.141, server: example.ru, request: "GET /index.php?page=search&Region=2 HTTP/1.1", upstream: "http://127.0.0.1:8080/index.php?index.php?page=search&Region=2", host: "example.ru"
Исправляется прописыванием в секцию http /etc/nginx/nginx.conf
proxy_buffers 8 16k;
proxy_buffer_size 32k;
(по умолчанию 4 8/16)
Но не больше
proxy_buffers 8 32k;
proxy_buffer_size 64k;
rpm висит и не отдает никаких данных - rpm hangs
Часто бывает после того как на сервере заканчивается место перестает выполняться команда rpm -qa (зависает) и не запускается в итоге ISPmanager
Лечение проблемы rpm hangs выполняется удалением некоторых файлов
rm /var/lib/rpm/__db.*
Лечение проблемы rpm hangs выполняется удалением некоторых файлов
rm /var/lib/rpm/__db.*
Как сделать detach screen и подключиться к нему
Иногда бывает необходимо подключиться к забытому или зависшему screen который находится в состоянии Attached
Это можно сделать следующей командой:
Это можно сделать следующей командой:
screen -d -R айди_скрина
Получаем список вида IP домен для прописывания в /etc/hosts через ISPmanager API
/usr/local/mgr5/sbin/mgrctl -m ispmgr webdomain | awk -F'ipaddr=|name=| ' '{print $(NF-1), $2, "www." $2}'
Нужно при переносах сайтов для проверки
sqlite3 /usr/local/mgr5/etc/ispmgr.db 'select t1.value, t2.name from webdomain_ipaddr t1 inner join webdomain t2 ON t1.webdomain = t2.id;' | awk -F'|' '{print $1, $2, "www." $2}'
wordpress поменять адрес url сайта
WordPress хранит в базе адрес сайта в таблице wp_options и следовательно надо чтобы там было правильно прописано иначе будет кривой редирект, прямо адрес прописан с протоколом
Также может потребоваться правка в wp-config
update wp_options set option_value='http://example.com' where option_name='home';
update wp_options set option_value='http://example.com' where option_name='siteurl';
Также может потребоваться правка в wp-config
define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');
Выставляем правильного владельца на файлы и директории сайта
Часто после переноса сайт нормально не работает, проблема в правах, выполняем пару команд чтобы не забыть в директории сайта
find . -type d -exec chmod 755 '{}' \;
find . -type f -exec chmod 644 '{}' \;
Простой конфиг для xdebug чтобы писал xdebug.log
[Xdebug]
zend_extension = "/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable = on
xdebug.remote_log = "/var/log/xdebug.log"
xdebug.remote_autostart = on
xdebug.remote_handler = dbgp
xdebug.remote_port = 9001
xdebug.remote_server = localhost
xdebug.remote_mode = req
; Most users won't want a hard coded idekey. More on this later.
xdebug.idekey = netbeans-xdebug
output_buffering = off
Подписаться на:
Сообщения (Atom)