Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: angie_bg в Dec 11, 2011, 12:49



Титла: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 11, 2011, 12:49
Здравейте, опитвам се да напиша скрипт (първи опит изобщо), който да прави следното:
1. изключва deluge
2. отмонтира твърдия диск
3. проверява файловата система за грешки
4. монтира диска
5. пуска deluge
За момента скриптът е:
Код:
#!/bin/bash          
killall deluge
umount /dev/sdc1
fsck -y /dev/sdc1
mount /dev/sdc1
/usr/bin/deluge
Проблем възниква още на първия ред:
Цитат
deluge: no process found
От друга страна:
Цитат
angie@angie-desktop:~$ ps ax |grep deluge
11714 pts/0    Z      1:31 [/usr/bin/deluge] <defunct>
11928 ?        Rl     2:16 /usr/bin/python /usr/bin/deluge-gtk
12022 pts/0    S+     0:00 grep --color=auto deluge
Правата на скрипта са:
Цитат
-rwxr-xr-x 1 angie angie 113 2011-12-11 12:12 torrent.sh
Въпросите:
1. къде греша и защо процесът не се открива?
2. трябва ли да сменя правата/собственика на скрипта, за да може да се изпълнява чрез cron?
Благодаря!


Титла: Re: Проблеми с bash скрипт
Публикувано от: Intel в Dec 11, 2011, 12:53
Добави пълния път до deluge, но не съм сигурен, че скрипта ти е изобщо скрипт. Това е все едно на perl-ски само system system system system....това са последователни команди и никаква вложена друга мисъл, не съм много веж в тази област, но си мисля, че алгоритъма като цяло го няма. if-вете ти къде са?


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 11, 2011, 13:18
Няма if-ове, защото не са нужни. Това трябва да се пуска да речем един път в денонощието, тъй като твърдия ми диск има грешки. В момента го правя на ръка, но понякога ме няма понякога 2-3 дни вкъщи и това е загубено време, през което компът работи напразно. Ако сменя пътя с /usr/bin/delug ефектът е същият, т.е. никакъв.


Титла: Re: Проблеми с bash скрипт
Публикувано от: stan_25 в Dec 11, 2011, 13:27
Грешката да не е заради това че процеса за убиване трябва да е deluge-gtk, а не deluge?


Титла: Re: Проблеми с bash скрипт
Публикувано от: b2l в Dec 11, 2011, 13:28
Грешката да не е заради това че процеса за убиване трябва да е deluge-gtk, а не deluge?

+1, изпревари ме.


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 11, 2011, 13:43
И така пробвах - нищо. Като извикам System monitor се вижда само един процес:
(http://www.linux-bg.org/home/angie/Desktop/S2.png)


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 11, 2011, 13:46
картинката


Титла: Re: Проблеми с bash скрипт
Публикувано от: stan_25 в Dec 11, 2011, 15:11
Значи като неможеш да убиеш делугето по име пробвай чрез номера на самия процес (PID)

Замени killall deluge с

Код:
ps -A | grep deluge | kill -9 `awk '{print $1}'`


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 11, 2011, 19:16
Благодаря, така "убихме" торента и проблемът се прехвърли на втория ред:
Цитат
umount: /media/W1: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
fsck from util-linux-ng 2.17.2
e2fsck 1.41.11 (14-Mar-2010)
/dev/sdc1 is mounted. 
lsof и fuser не ми дадоха нищо полезно като информация


Титла: Re: Проблеми с bash скрипт
Публикувано от: stan_25 в Dec 11, 2011, 19:21
Не съм много по скриптовете и аз, но се поразмислих и ако греша някъде, нека да ме поправят останалите.

Основната ти цел е да демонтираш даден дял за да извършиш проверка на него. Така за целта трябва да се убият всички процеси които ползват въпросния дял, иначе няма да може да се демонтира. Хубаво спираш deluge-то, но това ли единствения процес който ползва дяла? Ако се окаже че по времето на изпълнението на скрипта работи и друг процес, тогава дяла няма да се демонтира, скрипта ще изплюе грешка и спира. Значи трябва да се намери по-подходящо решение от горното. Трябва да се открият всички процеси след което да се спрат. Чрез lsof /dev/sdc1 може да изкараш списък с всички процеси които ползват дяла /dev/sdc1 след което в комбинация с kill да ги терминираш. После си изпълняваш останалите операции. Ето как ще иглежда и скрипта за целта.

Код:
#!/bin/bash          
lsof /dev/sdc1 | kill -9 `awk 'FNR>1''{print $2}'`
umount /dev/sdc1
fsck -y /dev/sdc1
mount /dev/sdc1
/usr/bin/deluge

пс: angie_bg това го писах по същото време с твоя последен пост :)


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 11, 2011, 19:33
@стан, благодаря за скрипта. Дискът не се използва от друг процес (поне съзнателно пуснат от мен), но ще модифицирам скрипта според последните ти поправки.
Май всичко тръгна: засега се оказва, че има значение как е пуснат deluge: ако е стартиран през конзолата - скриптът тръгва, ако е стартиран от менюто Applications > Internet > deluge - дори да се убие процеса, не може да се отмонтира диска.
Ще го наблюдавам няколко дни и тогава ще отбележа проблема като решен.


Титла: Re: Проблеми с bash скрипт
Публикувано от: stan_25 в Dec 11, 2011, 20:17
Май всичко тръгна: засега се оказва, че има значение как е пуснат deluge: ако е стартиран през конзолата - скриптът тръгва, ако е стартиран от менюто Applications > Internet > deluge - дори да се убие процеса, не може да се отмонтира диска.

Дам... Мисля че намерих решение и на този проблем. Просто демонтирането на дяла трябва да се забави след като се убият процесите. Ето новото ми предложение.

Код:
#!/bin/bash          
lsof /dev/sdc1 | kill -9 `awk 'FNR>1''{print $2}'`
sleep 2
umount /dev/sdc1
fsck -y /dev/sdc1
mount /dev/sdc1
/usr/bin/deluge

Командата sleep осигурява забавянето а числото след нея са секундите на забавяне. В случая убива процесите, изчаква 2 сек и тогава демонтира диска. Тествай и ако се налага увеличи паузата.


Титла: Re: Проблеми с bash скрипт
Публикувано от: b2l в Dec 11, 2011, 20:20
//off

Имам един много тъп въпрос: при положение, че диска ти се скапва, защо продължаваш да го мъчиш с тия торенти? Само не ми казвах, че гониш рейтинг?


Титла: Re: Проблеми с bash скрипт
Публикувано от: vox в Dec 11, 2011, 20:45
+1 за b2l , рейтинга се осребрява в края на месеца :)


Титла: Re: Проблеми с bash скрипт
Публикувано от: solarflux в Dec 12, 2011, 00:16
можеш да замениш целия първи ред с
fuser -km /mountpoint_of_sdc1



Титла: Re: Проблеми с bash скрипт
Публикувано от: shoshon в Dec 12, 2011, 00:56
можеш да замениш целия първи ред с
fuser -km /mountpoint_of_sdc1

Ама той човека не иска да освободи файловата система от процеси, иска да отрепе делугето щото му е сърдит дето му скапва диска

Не. че делугето скапва диска, ама...

Не, че

А бе радвам се че си дал единствения правилен отговор!


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 12, 2011, 09:02
Цитат
//off

Имам един много тъп въпрос: при положение, че диска ти се скапва, защо продължаваш да го мъчиш с тия торенти? Само не ми казвах, че гониш рейтинг?
//on Защото ми е жал да хвърля 1ТВ диск (все пак от него 4/5 са относително здрави). Фирменият софтуер на WD отказва да работи - явно е решил, че дискът е за хвърляне. И все пак... използвам го за буферен диск - при първа възможност прехвърлям записаното на подложки или на друг диск.


Титла: Re: Проблеми с bash скрипт
Публикувано от: bop_bop_mara в Dec 12, 2011, 16:53
А Deluge демонизирано ли го пускаш?


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 14, 2011, 19:35
Цитат
А Deluge демонизирано ли го пускаш?
Освен, че работи като енергиен и емоционален вампир - не, май не. За първи път съм го стартирал от менюто, а след това тръгва като съхранена сесия. Не е включено в някакъв стартиращ скрипт при запуск на машината.


Титла: Re: Проблеми с bash скрипт
Публикувано от: bop_bop_mara в Dec 14, 2011, 19:57
Няма ли да е по-удобно да го пускаш като демон (deluged) и да си върви, пък като ти потрябва да си го цъкаш, да си пускаш и графичния интерфейс?


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 16, 2011, 07:27
Цитат
Няма ли да е по-удобно да го пускаш като демон (deluged)
Кое е по-удобното? Нямам опит и съответно мнение.
Другият проблем, който не съм решил е следният: deluge спира, дискът се отмонтира, но не може да се монтира (като потребител), защото няма съответен запис във fstab. Мога да добавя запис, но в момента дискът е sdc1, а като го сложа на друг порт ще има друга буква. Ако го монтирам по uuid няма значение портът, но не съм сигурен при последващо форматиране дали няма да се промени uuid и съответно да се налага промяна във fstab.
Направи ми впечатление още нещо: при добавяне на задачата излиза предупреждение, че скриптът ще се стартира от домашната ми директория (той е там), но според bash ръководствата трябва да може да се стартира с ./torrent.sh. Да, ама не - получавам съобщение, че нямам права за изпълнение (независимо дали съм потребител или root). Ако го стартирам с bash torrent.sh - тръгва. Защо е така? Коя от командите трябва да е в кронтаба - само "torrent.sh" или "bash torrent.sh"?


Титла: Re: Проблеми с bash скрипт
Публикувано от: bop_bop_mara в Dec 16, 2011, 08:59
Цитат
Кое е по-удобното? Нямам опит и съответно мнение.
Ъм, така, както го пускаш, не се ли отваря и прозорец с програмата? (Може да бъркам...)

Цитат
според bash ръководствата трябва да може да се стартира с ./torrent.sh

Така се стартира, ако е в текущата директория и има вдигнато x (execute) право:
Код
GeSHi (Bash):
  1. man chmod
  2. chmod u+x torrent.sh
По принцип уж root има права за всичко, но за x правото на файл май се иска да е вдигнато поне за някой от user, group или others.

Цитат
Коя от командите трябва да е в кронтаба - само "torrent.sh" или "bash torrent.sh"
Ако вдигнеш x правото, няма значение, равносилни са (ако не го вдигнеш, ясно, че само работещата :)).


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 16, 2011, 17:09
Цитат
не се ли отваря и прозорец с програмата?
Отваря се, но не ми е пречил досега.
Цитат
ако е в текущата директория и има вдигнато x (execute) право:
в текущата директория (/home/angie) и правата са rwх за всички - собственик, група и др. Но стартира само с "bash", а не с "./" - иначе дава съобщение за грешка. Сега не съм при компа, но утре следобед бих могъл да приложа картинка


Титла: Re: Проблеми с bash скрипт
Публикувано от: bop_bop_mara в Dec 16, 2011, 17:29
в текущата директория (/home/angie) и правата са rwх за всички - собственик, група и др. Но стартира само с "bash", а не с "./" - иначе дава съобщение за грешка
Това и от терминал като го пускаш, или само от cron, че не разбрах? По принцип в crontab не се ли слага пълен път до скриптовете?

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

Ти си преценяш, разбира се, просто такъв вариант ми се струва пасващ на нещата, които правиш (доколкото разбрах правиш точно това - пускаш торента и го оставяш да си работи). Иначе, ако отваряш графично приложение от скрипта, струва ми се, че е добре да настройваш и променливата DISPLAY.


Титла: Re: Проблеми с bash скрипт
Публикувано от: angie_bg в Dec 17, 2011, 12:19
Цитат
Това и от терминал като го пускаш, или само от cron, че не разбрах?
Би трябвало да е от cron, но за да го видя дали работи го пускам от терминал.
(http://store.picbg.net/pubpic/A2/72/5673db8cb681a272.png)
Както виждаш скриптът има всички права, но при стартиране с "./" не тръгва нито като потребител, нито като администратор. Тръгва само с "bash torrent.sh".
Следващият проблем е при монтирането след проверката: липсващ запис в fstab или mtab. При стартиране на компа, дискът се монтира автоматично в папка W1 (какъвто е етикетът на диска) в /media. Ако има запис в fstab и предварително създадена директория /media/W1, при стартиране се създава и дискът се монтира във W1_, a файловете започват да се свалят наново в /media/W1, а не в новосъздадената /media/W1_. Вариантът да се включва диска след стартиране на системата за момента не ме устройва.
Цитат
По принцип в crontab не се ли слага пълен път до скриптовете?
Според съобщението , което получавам, не би трябвало пътят да е пълен, ако скриптът е в домашната директория. Сега съм въвел целият път, но същото съобшение се появява и без да съм го описал.(http://store.picbg.net/pubpic/78/4C/2e25124f5d5f784c.png)
Цитат
...а чак като ми дотрябва да управлявам торентите, пускам и графичния клиент
Каква комбинация демон+клиент ползваш (мисля да пусна един стар комп без Х, който да се занимава предимно с торентите)?


Титла: Re: Проблеми с bash скрипт
Публикувано от: radoshow в Dec 17, 2011, 17:14
@angie_bg Пробвай да стартираш по този начин скрипта:
Код
GeSHi (Bash):
  1. /bin/sh -c "/home/angie/torrent.sh"