воскресенье, 26 апреля 2009 г.

UNIX

Заметки:



Параметры ядра Linux можно устанавливать так:


Половину всей "MemTotal" отдаём под hugepages (при "MemTotal Kb"/2048 была бы отдана вся память)
echo "vm.nr_hugepages = $(awk '$1 == "MemTotal:"{tmp=$2/4096; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf


Максимальный размер сегмента разделяемой памяти составляет половину всей "MemTotal"
sed -ie 's/^kernel.shmmax/#kernel.shmmax/g' /etc/sysctl.conf
echo "kernel.shmmax = $(awk '$1 == "MemTotal:"{tmp=$2*512; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf


Половину всей "MemTotal" отдаём под Shared Memory (при "MemTotal Kb"/4 была бы отдана вся память)
sed -ie 's/^kernel.shmall/#kernel.shmall/g' /etc/sysctl.conf
echo "kernel.shmall = $(awk '$1 == "MemTotal:"{tmp=$2/8; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf


ora soft memlock = "MemTotal Kb" * 0.901
echo "ora soft memlock $(awk '$1 == "MemTotal:"{tmp=$2*0.901; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/security/limits.conf


ora hard memlock = "MemTotal Kb" * 0.901
echo "ora hard memlock $(awk '$1 == "MemTotal:"{tmp=$2*0.901; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/security/limits.conf


Пример:

cat << EOF >> /etc/security/limits.conf
ora soft nofile 65536
ora hard nofile 65536
ora hard nproc 65536
ora soft nproc 65536
EOF

echo "ora soft memlock $(awk '$1 == "MemTotal:"{tmp=$2/2; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/security/limits.d/99-grid-oracle-limits.conf
echo "ora hard memlock $(awk '$1 == "MemTotal:"{tmp=$2/2; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/security/limits.d/99-grid-oracle-limits.conf

cat << EOF >> /etc/sysctl.conf
kernel.sem = 250 32000 100 1024
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.panic_on_oops = 1
EOF

sed -ie 's/^kernel.shmmax/#kernel.shmmax/g' /etc/sysctl.conf
sed -ie 's/^kernel.shmall/#kernel.shmall/g' /etc/sysctl.conf
echo "kernel.shmall = $(awk '$1 == "MemTotal:"{tmp=$2/8; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
echo "vm.nr_hugepages = $(awk '$1 == "MemTotal:"{tmp=$2/4096; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
echo "kernel.shmmax = $(awk '$1 == "MemTotal:"{tmp=$2*512; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf
yum -y install libXp libaio-devel sysstat unixODBC unixODBC-devel gcc elfutils glibc-devel glibc-headers gcc-c++ kernel-headers libstdc++-devel elfutils-libs elfutils-libelf-devel xorg-x11-utils ksh compat-libcap1 compat-libstdc++-33 tuned unzip
chkconfig tuned on
service tuned start



Настройка sshd_config на Linux:



Установить необходимые пакеты:

yum install nc
yum install xauth
yum install xclock
yum install xorg-x11-fonts*
yum search fuser
yum install psmisc
yum list elfutils-libelf-devel
yum install elfutils-libelf-devel
yum search screen
yum install screen.x86_64



vi /etc/ssh/sshd_config

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

/bin/systemctl status   sshd.service
/bin/systemctl restart  sshd.service



Настройка sshd_config на AIX


# vi /etc/ssh/sshd_config

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes


# stopsrc -s sshd; sleep 2; startsrc -s sshd



Crontab


Запись crontab- файла в общем случае состоит из семи полей:
минуты   часы   день  месяц   день_недели  имя_пользователя   команда
Допустимые значения временных параметров:
Параметр Допустимый интервал
минуты 0-59
часы 0-23
день месяца 1-31
месяц 1-12
день недели 0-7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)
Поле может быть задано явно или шаблоном:
  • * — любая цифра;
  • целое число;
  • целые числа через запятую — задание дискретного множества значений, например 1,2,5;
  • два целых числа, разделенные дефисом, соответствующие диапазону значений, например 3-6.
Пример готовой строки сценария cron:

 Каждую минуту:
* * * * *
Каждый час, с использованием переменных cron:
@hourly ~/script.sh

Каждый день в 03:15 запускать скрипт:
15 3 * * * ~/script.sh

Каждый понедельник:
0 0 * * 1

Каждый четный час:
* */2 * * *

Тоже что и выше, но расписанное полностью:
* 0,2,4,6,8,10,12,14,16,18,20,22 * * *

Каждые 10 минут:
*/10 * * * *

Новый год
59 23 31 dec *

Каждый будний день в 22:00:
0 22 * * 1-5

каждый час в 15 минут;
15 * * * *

каждую минуту, между 00:00 и 00:59.
* 0 * * *

Запуск программы с графической оболочкой (GUI); каждую минуту будет отображаться сообщение с текстом:
0-59 * * * * DISPLAY=:0 gdialog --msgbox "Hello World\!" 25 20 > /dev/null


Запуск скрипта каждый понедельник в 9:00 и 18:00 часов:
0 9,18 * * 1 /home/angor/script.sh
Запуск скрипта каждый день в 0:30 и 12:30:
30 */12 * * * script.sh
Запуск команды каждый месяц 1 числа в 12:00:
0 12 1 * * command
Запуск скрипта в полночь с понедельника по пятницу:
0 0 * * 1-5 /home/angor/script.sh
# выполнять скрипт backupscript каждые 5 минут
*/5 * * * * /root/backupscript.sh
# выполнять скрипт backupscript каждый день в час ночи
0 1 * * * /root/backupscript.sh
# выполнять скрипт каждый месяц первого числа в три часа ночи пятнадцать минут
15 3 1 * * /root/backupscript.sh
# Выполнять задание в 18 часов 7 минут 13 мая если это пятница
7 18 13 5 5 /home/angor/myscript.sh
# Выполнять задание раз в час в 0 минут
0 */1 * * * /home/angor/myscript.pl
# Выполнять задание каждые семь часов в 0 минут
0 */7 * * * /home/angor/myscript.sh
# Выполнять задание по воскресеньям в 10 час 30 минут
30 10 * * 0 /home/angor/myscript.pl

# Пример запуска скрипта python каждую минуту:
* * * * * export DISPLAY=:0 && /usr/bin/python /home/angor/script.py
#Или так:
* * * * * export DISPLAY=:0 && cd /home/angor && ./script.py

# Пример запуска скрипта php в 5 утра каждый день:
0 5 * * * /usr/bin/php -q /home/angor/script.php


Пример для тестовой базы:

# Reserv Crontab to text file:
0 03 * * * crontab -l > ${HOME}/bin/crontab_oracle.lst

# Checking filesystem usage:
30    08 * * * ${HOME}/bin/pkg/monitor_fs/_run.sh 80 Warning  > /dev/null 2>> /tmp/crontab_oracle.err
09,39  * * * * ${HOME}/bin/pkg/monitor_fs/_run.sh 90 Error    > /dev/null 2>> /tmp/crontab_oracle.err

# Rman Backups:
00 20 * * * ${HOME}/bin/pkg/rman_backup/_run.sh   testdb     > /dev/null 2>> /tmp/crontab_oracle.err

# ADRCI purge
30 06 * * 0 ${HOME}/bin/pkg/adrci_purge/_run.sh  > /dev/null 2>> /tmp/crontab_oracle.err

# Clean system audit
06 04 * * * ${HOME}/bin/pkg/clean_sys_audit/_run.sh 7 > /dev/null 2>> /tmp/crontab_oracle.err

# MAINTANANCE_STATISTICS:
00 06 * * 0 ${HOME}/bin/pkg/gather_statistics/_run.sh testdb   > /dev/null 2>> /tmp/crontab_oracle.err



Продолжительность выполнения скрипта:


start_secs=$(/usr/xpg4/bin/awk 'BEGIN{srand();print srand()}')
begin_backup="`date +%Y.%m.%d" "%H:%M:%S`"

sqlplus '/ as sysdba' << EOF > /dev/null
alter database backup controlfile to trace as '$RMAN_BKP/$ORACLE_SID/ctrl_trace_${ORACLE_SID}' reuse;
create pfile='$RMAN_BKP/$ORACLE_SID/init${ORACLE_SID}.bkp' from spfile;
exit;
EOF

cp -pr ${orapwd_filename} $RMAN_BKP/$ORACLE_SID/orapw${ORACLE_SID}

$UTL_RMAN target / catalog 'rman/pass@catdb'  cmdfile ${rman_cmdfile}  log=${log_file}
###$UTL_RMAN target /  cmdfile ${rman_cmdfile}  log=${log_file}

finish_secs=$(/usr/xpg4/bin/awk 'BEGIN{srand();print srand()}')
end_backup="`date +%Y.%m.%d" "%H:%M:%S`"

let diff_secs=($finish_secs - $start_secs)

let days=$diff_secs/86400
let remainder=$diff_secs%86400
let hours=$remainder/3600
let remainder=$remainder%3600
let minutes=$remainder/60
let seconds=$remainder%60

size=$(du -sh /u09/backups/oradb/rman/${ORACLE_SID}/oradata/ | awk '{print $1}')
echo "Begin backup:     $begin_backup" >> ${log_file}
echo "End backup:       $end_backup" >> ${log_file}
echo "Duration: Days = $days, Hours = $hours, Minutes = $minutes, Seconds = $seconds" >>${log_file}
echo "Size:             $size" >>${log_file}