Archive for March, 2013

Linux + scheduled tasks

Monday, March 25th, 2013

Може да ви се наложи да стартирате команда по часовник или по време когато не сте на машината.
Единият вариант който се използва е cron, но това е по-скоро за задачи, които се повтарят във времето. Няма да го разлеждаме, тъй като нета е пълен с примери и на всеки рано или късно му се е налагало да си блъска главата с него 🙂

По-интересното е да направим единично стартиране на задача по зададено време.

В Линукс това става много лесно с командата `at`:


(19:18:49)[ivanatora@~]$ at 19:20
warning: commands will be executed using /bin/sh
at> beep
at>
job 17 at Mon Mar 25 19:20:00 2013

Забележка: това <EOT> предполагам че е end-of-terminal и се получава с CTRL+D.
В случая задачата която ще се стартира е `beep`. Можете да напишете цял скрипт в промпта на `at` или да укажете външен файл който съдържа скриптираните задачи чрез `at [-f file]`. Отбележете че интерпретаторът, с който се изпълнява скрипта в случая е /bin/sh – това ще ви се отрази ако искате да скриптирате по-сложни задачи използвайки вградените възможности. Естествено, нищо не ви пречи да стартирате скрипт писан на какъвто и да е език:


(19:23:46)[ivanatora@~]$ at 19:50
warning: commands will be executed using /bin/sh
at> php /home/ivanatora/test.php
at>
job 18 at Mon Mar 25 19:50:00 2013

Списък с текущите активни задачи може да видите с `atq`:


(19:24:02)[ivanatora@~]$ atq
18 Mon Mar 25 19:50:00 2013 a ivanatora

Може да се зачудите къде отиде задача 17? Ами тя изтече докато напиша тези редове 😉

Може да изтривате задачи от списъка с `atrm`:


(19:25:35)[ivanatora@~]$ atrm 18
(19:26:13)[ivanatora@~]$ atq
(19:26:37)[ivanatora@~]$

Може да преглеждате с детайли определена задача с `at [-c job]`:

(19:27:20)[ivanatora@~]$ at 19:30
warning: commands will be executed using /bin/sh
at> beep
at>
job 19 at Mon Mar 25 19:30:00 2013
(19:27:37)[ivanatora@~]$ at -c 19
#!/bin/sh
# atrun uid=1000 gid=1000
# mail ivanatora 0
umask 2
SSH_AGENT_PID=2367; export SSH_AGENT_PID
GPG_AGENT_INFO=/tmp/gpg-xsDFU4/S.gpg-agent:2368:1; export GPG_AGENT_INFO
XDG_SESSION_COOKIE=4784344ffacd7f8cf96108324bae42fb-1364229708.104884-44687589; export XDG_SESSION_COOKIE
WINDOWID=37748745; export WINDOWID
GNOME_KEYRING_CONTROL=/tmp/keyring-bylSRi; export GNOME_KEYRING_CONTROL
GTK_MODULES=canberra-gtk-module; export GTK_MODULES
USER=ivanatora; export USER
LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lz=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.war=01\;31:\*.ear=01\;31:\*.sar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.webm=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=00\;36:\*.au=00\;36:\*.flac=00\;36:\*.mid=00\;36:\*.midi=00\;36:\*.mka=00\;36:\*.mp3=00\;36:\*.mpc=00\;36:\*.ogg=00\;36:\*.ra=00\;36:\*.wav=00\;36:\*.axa=00\;36:\*.oga=00\;36:\*.spx=00\;36:\*.xspf=00\;36:; export LS_COLORS
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0; export XDG_SESSION_PATH
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0; export XDG_SEAT_PATH
SSH_AUTH_SOCK=/tmp/ssh-UytBrOmq2318/agent.2318; export SSH_AUTH_SOCK
DEFAULTS_PATH=/usr/share/gconf/fluxbox.default.path; export DEFAULTS_PATH
XDG_CONFIG_DIRS=/etc/xdg/xdg-fluxbox:/etc/xdg; export XDG_CONFIG_DIRS
DESKTOP_SESSION=fluxbox; export DESKTOP_SESSION
PATH=/home/ivanatora/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ivanatora/bin/; export PATH
PWD=/home/ivanatora; export PWD
GNOME_KEYRING_PID=2307; export GNOME_KEYRING_PID
LANG=en_US.UTF-8; export LANG
MANDATORY_PATH=/usr/share/gconf/fluxbox.mandatory.path; export MANDATORY_PATH
UBUNTU_MENUPROXY=libappmenu.so; export UBUNTU_MENUPROXY
PS1=\\[\\033[1\;34m\\]\(\\t\)\\[\\033[0m\\][\\u@\\[\\033[1\;33m\\]\\w\\[\\033[0m\\]]\\\$\ ; export PS1
GDMSESSION=fluxbox; export GDMSESSION
SPEECHD_PORT=7560; export SPEECHD_PORT
COLORFGBG=15\;default; export COLORFGBG
HOME=/home/ivanatora; export HOME
SHLVL=2; export SHLVL
LOGNAME=ivanatora; export LOGNAME
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-rCyQHFVg4i,guid=31de69d47f7c412295741b5100000041; export DBUS_SESSION_BUS_ADDRESS
XDG_DATA_DIRS=/usr/share/fluxbox:/usr/local/share/:/usr/share/; export XDG_DATA_DIRS
LESSOPEN=\|\ /usr/bin/lesspipe\ %s; export LESSOPEN
BROWSER=firefox; export BROWSER
LESSCLOSE=/usr/bin/lesspipe\ %s\ %s; export LESSCLOSE
COLORTERM=rxvt-xpm; export COLORTERM
XAUTHORITY=/home/ivanatora/.Xauthority; export XAUTHORITY
cd /home/ivanatora || {
echo 'Execution directory inaccessible' >&2
exit 1
}
beep

 

Ау, уау, какво стана? Къде е задачата?

Задачата е най-отдолу, но за да стигне до нея `at` зарежда доста от променливите на обкръжението. Който е писал и дебъгвал крон задачи знае колко е досадно да разчиташ на определена променлива от средата, а тя да не е това което трябва…И въпреки всичкото това зареждане тук ни липсва една важна променлива, която ако сетнем ръчно ни отваря нови хоризонти. А именно – DISPLAY. По подразбиране дефаултния дисплей е “:0.0” и ако го използваме, може да стартираме задача, която работи с Х-а.

Една примерна грубa елементарна напомнянка:


(19:34:37)[ivanatora@~]$ at 19:36
warning: commands will be executed using /bin/sh
at> beep
at> DISPLAY=:0.0 xmessage "remember to eat dinner!"
at>
job 23 at Mon Mar 25 19:36:00 2013

Възможните формати за подаване на времето за стартиране е доста обширен и може да го видите в /usr/share/doc/at/timespec

Облачен уикенд и още нещо

Sunday, March 10th, 2013

Облачен, но в добрия смисъл! Адски динамично небе, имаше невероятни гледки. Няколко от тях успях да щракна, повечето ги пропуснах. И за финал имаше една супер изненада.

Всичко започна още петък вечер докато се прибирах към Стара Загора. Залезът се случваше под едни скромни лъскави облачета. От другата страна цялото небе беше в огромни късове, които бяха окървавени от единия край. Пръста ми сам се свиваше да щрака, но точно излизах от Пловдив и нямаше къде да отбия. Такива явления продължават десетина минути. Точно след залез има още няколко минути през които по-високите облаци биват огрявани и след това всичко започва да изсивява. Изпуснах момента.

Събота сутринта в някакво безбожно ранно време си отворих едното око и през прозореца видях нещо подобно навън. Цялото небе беше алена облачна маса, която се беше напукала като мозайка и през нея прозираше небе. Красиво беше, но душичката ми спеше и не можах да се помръдна.

Неизвестно време по-късно си отворих другото око и навън всичко беше сив облак. Грозно, скучно и си рекох че тва беше за днес.

В 10 и кусур най-после успях да стана и опаа – небето чисто искрящо синьо, без ни едно вълмо облаче. Сутрешните упражнения – кенеф-кухня и като погледнах през северния прозорец видях НЛО над планината 🙂

Планината Фиджи ряпа да яде

Отбелязах интересното начало на деня и се пуснах по задачи. Точното им естество няма значение, но предиобеда ми беше доста зает. След това мръднах към Малка Верея. Получили два компютъра дарение за библиотеката и за да е всичко както трябва без пиратски софтуер им сложихме Ubuntu. Тук се сблъскахме с малко подводни камъни с последната версия (12.10 на слаби компютри – никога повече, но пък 12.04 LTS заспа).
Нагодихме горе-долу нещата и тръгнахме да си ходим. А навън – чудни агресивни облаци. Дръпнахме една разходка по малковерейския кър.

Качихме се на една могила, от където имаше супер изглед. Това ми беше втората възможност да пощракам с телескопа и естествено аз се олях. Е, не е “телескоп” – Sigma 18-250 DC OS HSM, но като човек свикнал да щрака на широко, тези 250 мм ми изглеждаха като телескоп. Иначе хич не бих отказал ако ми се отвори възможност да щракам през телескоп. Снимките са качени в пълна резолюция, така че като цъкнете отгоре може да ги видите в детайли.

Панелките на Стара Загора. Отзад се вижда Самарското знаме на 10 км разстояние.

Най-близо е индустриалната зона на Стара Загора (8км), отзад – квартал Зора (12км), Агробиохим или бившия завод АТЗ (16км) и съвсем отзад в дясно се вижда… Нова Загора – 39 км :)

Тук имаме спор какво кой град се вижда към хоризонта – Раднево или Гълъбово. Има доста панелки за да е Гълъбово, но пък не знам в дясно от Раднево кой ТЕЦ може да се вижда там. Ако е Гълъбово, това ще да е AES-a.

Богомилово, зад него деликатно се промушва околовръсното шосе на Стара Загора. Големите резеровари са петролната база на Лукойл към Еленино.

Нащраках се с телескопа и започнах да забелязвам облаците 🙂

Засърбя ме да ги видя тези облачета отразени във водна повърхност и драснахме към Старозагорските бани. Надявах се и залез да хванем там да се получи нещо като петък вечерта. Е, не се получи – слънцето се скри зад една грамада и това леко пропадна.

Тук се опитах да изкарам нещо от сенките, но единственото което успях да изкопча с 2 стопа клин беше това:

Наплясках една панорама от 5 кадъра, която Хюгина сглоби много интересно – с главата надолу 🙂 Всъщност ефекта който се получи много ми хареса. Само косата на Стела да висеше 🙂

В обратната посока на залеза се опитах да издебна червени отблясъци, но не дойдоха.

Неделята не беше особено благодатна. Цял ден играхме на криеница с дъжда и накрая се забихме да гледаме кино. След това стана късно и трябваше да тръгвам да се прибирам към Пловдив. Ударих си един душ. Гледам прозорците – мокри, а вън яко слънце пече та се къса. Викам си “сега пък ако не се е пръкнала някоя дъга…” Метнах един поглед навън и ченето ми падна. Имаше солидна, наситена, светла огромна дъга. И защото обичам дъги, до нея имаше втора 🙂 Изпуснах и кърпи и клечки за уши и всичко и се завтекох към фотото. Пробвах със и без поляризационния филтър. Чувал съм митове че може да изкара повече цвят от дъгата. Оказаха се само митове… В едната позиция дъгата изчезваше хептен, а в останалите не ставаше нищо по-интересно. На практика посоката в която щраках беше 180 градуса на слънцето, където и не би се очаквал някакъв ефект от този филтър.

Какви са условията за да се получи дъга? Най-просто казано слънцето трябва да е ниско в небето и да огрява водни капки от срещуположната ви страна. Дъгата се получава от пречупената светлина от Слънцето и е образ, не обект. Не можете да се приближите до нея или да я заобиколите 🙂

Основната дъга (ако се наблюдава повече от една) има радиус 42° и центърът ѝ е винаги точно срещуположен на слънцето. Т.е. колкото е по-ниско слънцето, толкова е по-голяма дъгата. Ако слънцето е високо, тогава центъра на дъгата пад под хоризонта и само малка част от нея се вижда. Ако се намирате в самолет и слънцето е под хоризонта на полета, дъгата която би се видяла може да изглежда като цяла окръжност 🙂

Изхождайки от това може да кажем че хубава дъга най-често може да се наблюдава по залез когато бурята ви е подминала и се движи на изток, или по изгрев когато бурята ви е подминала и се движи на запад. Освен кефа от дъгата, ще се намирате в златния час, така че може да си вземете пуканките и да се насладите на шоуто, което ви изнася природата 🙂