Translate

понеділок, 14 вересня 2009 р.

Планувальник Cron

Часто виникає необхідність автоматизувати виконання певних задач в заданий час, наприклад таких як оновлення системи чи запуск демонів та інше. Таким чином ми не повинні хвилюватися за їхнє вчасне виконання, за все подбає cron. Отже, переходимо до суті.
Головним конфігураційним файлом планувальника є /etc/crontab . Кожний рядок цього файлу повинен складатись з таких семи полів:

хвилина година число місяць день_тиждня користувач команда

Поля один від одного повинні відокремлюватись або пробілами, або символами табуляції. Наведу допустимі значення кожного з полів:

Поле................ Допустиме значення

хвилина ................* або 0-59
година ...................* або 0-23
число .....................* або 1-31
місяць ....................*, 1-12 або ім'я місяця
день_тиждня .......*, 0-7 або ж ім'я дня (неділя - це як 0 так і 7)
користувач ............користувач, від імені якого буде виконуватись команда
команда ..................власне команда, виконання якої ви бажаєте виконати в заданий час

Також дозволено вказувати декілька значень полів через кому і діапазонів через тире. Наприклад: "1,2,9" чи "0-4, 8-12". В випадку діапазону, вказані числа також входять в проміжок. Наприклад, значення поля "година" 9-12 призведе до виконання команди об 9, 10, 11 та 12 годинах.

При вказанні діапазону, можна пропускати деякі його значення, вказавши крок у формі /число . Наприклад: "0-59/5" для поля "хвилина" значить запуск команди через кожні п'ять хвилини на протязі всього діапазону хвилин. Крок також можна вказувати після зірочки : "кожні 5 хвилин" відповідає значенню "*/5"

Зірочка без вказання кроку відповідає всьому діапазону значень.

Для вказання полів "місяць" та "день_тиждня" дозволено використання імен місяця та дня тижня англійською мовою в якості трьох перших букв, регістр букв неважливий. В цьому випадку вказувати діапазони чи списки не можна.

Демон cron запускає вказані команди, коли значення полів "хвилина", "година", "місяць" і хоча б одне з полів "число" і "день_тиждня" співпадають з часом. Сron звіряє директиви з часом кожну хвилину.

Слід також зауважити, що день виконання команди може бути задане в двох полях - "число" та "день_тиждня". Якщо в кожному полі вказане значення (але не *), то команда буде запущена, коли одне з полів співпаде з часом. Продемонструємо це на прикладі:

30 4 1,15 * 5

запис призведе до виконання команди об 4:30 по півночі першого і п'ятнадцятого чисел, і до того ж всього, кожну п'ятницю.

Замість перших п'яти полів дозволено вказувати один із восьми спеціальних тригерів:

Рядок.................. Значення

@reboot ..............Виконати команду один раз, при запуску cron-а.
@yearly ..............Виконувати команду кожне 1 січня, "0 0 1 1".
@annually ...........---//---
@monthly ...........Виконувати команду кожен місяць, "0 0 1 * *".
@weekly .............Виконувати команду кожної неділі (день тиждня), "0 0 * * 0".
@daily .................Виконувати команду опівночі, "0 0 * * *".
@midnight ..........---//---
@hourly ..............Виконувати команду щогодини, "0 * * * *".

Для повного розуміння ситуації наведу приклад файлу /etc/crontab (демон працює в ОС Kubuntu 8.10):

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

#запускати в п'ять хвилин після півночі, кожен день
5 0 * * * ipeacocks $HOME/ipeacocks/daily.job >> $HOME/zvit/blabla.txt

#запускати о 14:15 першого числа кожного місяця
15 14 1 * * ipeacocks $HOME/bin/monthly

#запускати о 22.00 кожний робочий день
0 22 * * 1-5 root poff kpitelecom >> /home/ipeacocks/blog.txt

5 4 * * sun echo "запуск в 4:05 кожну неділю"


Після зміни файлу /etc/crontab варто виконати команду:

crontab /etc/crontab

середу, 8 липня 2009 р.

Монтування файлової системи. Fstab

Файл /etc/fstab є в будь-якому дистрибутиві Linux: він пов'язаний з монтуванням файлових систем. Впринципі структура файлу неважка, але поява багатьох файлових систем значно його ускладнили. Добре перевірте файл fstab, адже коли його невірно відредагувати і зберегти система може не завантажитись взагалі. Отже, спробуймо в ньому розібратись.


(для перегляду таблички натисни на неї )


Кожний рядок файлу fstab розбивається на 6 полів (див. таблицю):

>>Поле 1. Пристрій, що має файлову систему, тобто розділ, що монтується. В останніх дистрибутивах в цьому полі записані мітки томів або UUID.

>>Поле 2. Точка монтування, каталог в який буде проходити монтування. Власне, перед монтуванням потрібно створити цей каталог, інакше система при завантаженні видасть помилку монтування.

>>Поле 3. Тип файлової системи розділу. Можна вказати параметр auto, що означає самостійно визначати тип файлової системи.

>>Поле 4. Тут задаються опції монтування. Дуже часто ці параметри залежать від того, який тип файлової системи, що буде монтуватись. Тобто, якщо розділ з файловою системою ext3 нормально монтувався з певними параметрами, то це не значить, що розділ ntfs також нормально примонтується з цими параметрами, і, зазвичай, він таки нормально не примонтується. Якщо параметри вказувати не треба, напишіть тут слово "defaults"(по замовчуванні default всатновлює такі опції: async, auto, dev, exec, nouser, rw, suid)

>>Поле 5. Зараз його майже не використовують. Воно використовується dump-ом (програмою створення інкрементних резервних копій) і визначає розділи, котрі потрібно архівувати.

>>Поле 6. Це поле визначає порядок, в якому файлові системи будуть перевірятись (програмою fsck) після збою системи і т.п. Воно приймає значення '1' для кореневого розділу (тобто перевірка в першу чергу) і '2' для всіх інших розділів. Для CD/DVD в цьому полі вповинен стояти '0', думаю, зрозуміло чому.

Ну і накінець розглянемо найбільшуживаніші опції монтування:

noauto - не монтувати розділ під час завантаження ОС, заборонене автоматичне монтування.

auto - автоматичне монтування сисемою розділа, при виявлені його або виконанні команди mount -a

user - дозволити звичайним користувачам (не root) монтувати пристрій. nouser відповідно навпаки, дозволяється лише root-у.

owner - власником змонтованого диску стане користувач, котрий його змонтував.

ro - монтувати в режимі тільки для читання. Такий параметр встановлюється на монтування розділу "/" задля підвищення безпеки.

rw - монтувати в режимі читання/запис.

noatime - не оновлювати час останнього доступу о файлу. Часом це підвищує продуктивність. В Ubuntu використовується аналогічна опція "relatime".

sync - синхронізує всі операції запису (дані одразу пишуться на диск). Про значення async писати не буду, думаю, зрозуміло.

nosuld - нівелює дії атрибутів "setuid" та "setgid". Ця опція часто призначається з'ємними носіями (наприклад, usb-драйви). Вона не дозволить взломщикам отримати доступ адміністратора, наприклад, за допомогою CD з оболочкою з установленим бітом setuid, власником якого є root.

exec - дозвіл на виконання скриптім та програм на диску. noexec відповідно протилежна опція.

gid=ID - призначення ID групи.

id=ID - призначення ID користувача.

Мало не забув навести типові приклади монтування розділів різних файлових систем.
Отже, для FAT32, 16 і т.д.:

/dev/логічний_розділ_диску /media/папка_монтування vfat umask=0, utf8 0 0

для NTFS:

/dev/логічний_розділ_диску /media/папка_монтування ntfs-3g defaults, utf8, umask=007,gid=46 0 0

для EXT4 (для EXT3, EXT2, EXT рядок аналогічний, окрім значення параметру "Тип файлової системи", треба змінити його на відповідний):

/dev/логічний_розділ_диску /media/папка_монтування ext4 defaults 0 0

понеділок, 16 березня 2009 р.

Налаштування мережі KPI-IX (static IP) через консоль в Ubuntu

Буває, що іноді мережу через графіку налаштувати непросто (для мене чогось так завжди, на убунті 7.10 я шарив як то зробити, а тепер я навіть не знаю як там, в кде 4.0 в вас і можливості немає налаштувати то через графіку). Після цієї статті ви зрозумієте, що не все так важко, як могло здаватись на перший погляд. Отже,

sudo nano /etc/network/interfaces

В нього копіюємо

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
# до цього місця нічого не міняємо, адже це параметри локальної петлі

auto eth0
iface eth0 inet static
address 10.XXX.X.XXX
netmask 255.255.255.0
gateway 10.YYY.Y.Y
dns-nameservers 10.7.1.X 10.7.1.Y

Сюди записуєте свої параметри.

Можна записати host-ім'я, відредактуйте /etc/hostname

sudo nano /etc/hostname

і туди запишемо свій хост-нейм у вигляді:

vasya

Ну ось і все. Не забуваймо перезапустити мережеву службу, що робиться так:

sudo /etc/init.d/networking restart

У випадку з DHCP , тобто коли вам айпі присвоюється автоматично, маємо записати в /etc/network/interfaces таке :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp


Знову ж таки, не забувайте після змін перевантажити мережу. І уважно дивіться, що на те відповідає команда перезапуску.

неділю, 15 березня 2009 р.

Налаштування VPN (PPTP) для операційної системи Ubuntu Linux

Власне, розглядаємо підключення до провайдера КПІ-телеком (http://kpitelecom.ntu-kpi.kiev.ua), маючи підключення до мережі KPI-IX.

1) В консолі виконумо команду від суперкористувача:

sudo aptitude install pptp-linux

PPTP - це протокол, за допомогою якого буде проходити підключення до провайдера. В вас перед цим повинна бути налаштована мережа та мережеві репозиторії, адже саме з них і буде встановлюватись вищезгаданий програмний пакет.

Слід зауважити, що в Убунту 10.04 і в 10.10 програмний пакет pptp-linux є по замовчуванню.

2) Cтворюємо файл за таким зразком:

sudo nano /etc/ppp/peers/kpitelecom

Туди копіюємо:

name ваш_логін (це не ваш номер до веб інтерфейсу, а логін типу vasya чи як там у вас )
remotename PPTP
lock
deflate 0
defaultroute
lcp-echo-interval 60
lcp-echo-failure 4
lcp-echo-interval 15
pty "/usr/sbin/pptp vpn2.ntu-kpi.kiev.ua --nolaunchpppd"


Зберігаємо написане - ctrl+O, виходимо - ctrl+X . Аналогічно зберігаємось далі.
3) Додаємо до файлу /etc/ppp/chap-secrets запис з вашим логіном та паролем:

ваш_логін(вищезгаданий) PPTP ваш_пароль

Не забуваймо зберегти написане.

4) Для налаштування маршрутизації потрібно виконати:

sudo route add -net 10.0.0.0/8 gw 10.xxx.yyy.zzz

Де 10.xxx.yyy.zzz – IP-адреса шлюзу у Вашій підмережі.

Маршрутизація потрібна для правильного розпізнавання системою понятть мережа Політеха та Інтернет.

Якщо є дефолтний шлюз – видаляємо його (а він таки є):

sudo route del default

Отже, до конекту до кпі-телекому таблиця роутів має виглядати приблизно так:


Звертаю увагу на відсутність дефолтного роуту, котрий мав би бути на початку (до налаштування впн-у) та на роут 10.0.0.0, гейтвей якого в моєму випадку floor3-gw.top7 (тобто 10.107.3.1). Коли ж вони до контакту з впн-ом відсутні, зрозуміло, що конекту не буде. Це по-суті, одна з найголовніших речей...

5) І нарешті:

sudo pon kpitelecom - підключення до свого аккаунту провайдера.

Для відконекчування використовуйте:

sudo poff

Часом говорять, що такі команди працюють не всіх лінуксових дистрах, тож можна конектитись ще так:

sudo pppd call kpitelecom

sudo killall pppd - ну це зрозуміло, я думаю.

6) Перевіримо чи з'явився інтерфейс підключення:

ifconfig ppp0

Реакція командного рядка:

ppp0 Link encap:Point-to-Point Protocol
inet addr:172.16.9.51 P-t-P:172.16.0.0 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1450 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:55 (55.0 b) TX bytes:61 (61.0 b)


Це дуже добре, коли в Вас вийшло аналогічне.

7) А ну ж бо, спробуємо чи пінгуються сервери:

ping ukr.net

PING ukr.net (212.42.64.8) 56(84) bytes of data.
64 bytes from kaena.ukr.net (212.42.64.8): icmp_seq=1 ttl=60 time=1.64 ms
64 bytes from kaena.ukr.net (212.42.64.8): icmp_seq=2 ttl=60 time=2.31 ms
64 bytes from kaena.ukr.net (212.42.64.8): icmp_seq=3 ttl=60 time=2.05 ms

Невже....невже воно обмінюється пакетами??? :) Яке щастя...Нарешті, нарешті...!!!

8) Так як Убунта перезаписує роути при кожному перевантаженні, то буде корисно додати route add -net 10.0.0.0/8 gw 10.xxx.yyy.zzz та route del defaulв /etc/rc.local. Отже файл /etc/rc.local буде виглядати наступним чином:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
route add -net 10.0.0.0/8 gw 10.xxx.yyy.zzz
route del default
exit 0

Останнім часом, після появи dhcp-сервера адрес, скрипт /etc/rc.local виконується раніше, ніж серевер присвоїть вам айпі (він в мене присвоються через 30-60 сек після ввімкнення), тобто запрацює мережа. Тож виходить що видаляються роути, яких ще не існує , бо /etc/rc.local не чекає увімкнення мережі і запускається одразу.  Тож , як непоганий варіант вирішення проблеми - додати в  /etc/network/interfaces команду що виконає одразу скрипт при підключенні:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
up sh /etc/inet.sh


Скрипт /etc/inet.sh має виглядати так:

#! /bin/bash
route del default
route add -net 10.0.0.0/8 gw 10.XXX.X.X

Можна трохи про конект до кпітелекому прочитати тут

Ну це все.) Па-па.