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

Програмиране => Общ форум => Темата е започната от: Lamqta в Oct 08, 2014, 18:00



Титла: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 08, 2014, 18:00
Така идеята е следната. Имам генерирани файлове от типа:

File.20141001.102344
File.20141004.211223
File.20141007.231805

Където 8символния низ е датата а след него съответно час, минути и секунди. Искам да направя скрипт който да прави лог файл в който има запис от типа на "Този файл е генериран на "дата" и "час", като дата и час се извличат от името на файла. По мои причини не искам да използвам таймстампа на самия файл. Ще оценя всяка помощ, пък и биричка ще почерпя :)


Титла: Re: Помощ за bash скрипт
Публикувано от: k0tka в Oct 08, 2014, 18:48
Просто решение...дани ти помогне:

Код:
for i in `ls`; do echo $i is created on date $(ls $i|cut -d'.' -f2) at $(ls $i|cut -d'.' -f3); done
File.20141001.102344 is created on date 20141001 at 102344
File.20141004.211223 is created on date 20141004 at 211223
File.20141007.231805 is created on date 20141007 at 231805


Ако ти върши работа ето ти и прост скрипт:

Код:
#!/bin/bash
DIR=/home/npetrov/tmp/
LOG=/home/npetrov/logfile.txt
pushd $DIR 2>&1 > /dev/null
for i in `ls`; 
do echo "$i is created on $(ls $i| cut -d'.' -f2) at $(ls $i| cut -d'.' -f3)" >> $LOG;
done
popd 2>&1 > /dev/null


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 08, 2014, 19:39
Благодаря за бързият отговор. Има ли начин да се представя часа и датата в userfriendly формат. Примерно 09/10/2014 at 10:45:34


Титла: Re: Помощ за bash скрипт
Публикувано от: k0tka в Oct 08, 2014, 19:50
Единият начин е файла да се запише в по-userfriendly формат, незнам от къде го извличаш, а ако това не е опция кажи, вероятно ще ти намеря начин, но ще ми отнеме повече време да го скалъпя...


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 08, 2014, 19:59
Не файла не трябва да се модифицира. А поради това че е голям като размер, не е препоръчително и да се записва. Това му хрумна на тъпия ми шеф, като че ли не може да си го прочете и така от коя дата е. Както и да е каквато тъпа калинка съм се захванах да го правя и ще ти бъда много благодарен ако помогнеш да го направим както трябва. Пак казвам биричката е от мен.


Титла: Re: Помощ за bash скрипт
Публикувано от: koue в Oct 08, 2014, 21:10
for i in `ls File*`; do
        echo $i | sed -n "s/File\.\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\.\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/`echo $i` is created on \1\/\2\/\3 at \4:\5:\6/p"
done


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 08, 2014, 21:26
Не знам защо но не ми дава резултат в лог файла. Ето и скрипта как изглежда.

#!/bin/bash
DIR=/path/to/dir
LOG=/path/to/log/logfile.txt
pushd $DIR 2>&1 > /dev/null
for i in `ls|head -1`; do
        echo $i | sed -n "s/File\.\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\.\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/`echo $i` is created on \1\/\2\/\3 at \4:\5:\6/p" >> $LOG;
done
popd 2>&1 > /dev/null


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 08, 2014, 21:30
моя грешка всичко работи перфектно. благодаря за помощта. Бирата от мен.


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 10, 2014, 11:40
Така сега възниква въпроса как да го изпълня това за няколко сървъра от една машина? Нещо от типа:

for i in server{0..1}{0..9}
do
echo -n "${i}, "
ssh $i sudo | по-горният скрипт


Титла: Re: Помощ за bash скрипт
Публикувано от: laskov в Oct 10, 2014, 12:08
Може би така ?

Execute commands simultaneously on multiple servers ($2)


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 10, 2014, 13:05
Може би но това не е решение. Поне за мен.


Титла: Re: Помощ за bash скрипт
Публикувано от: k0tka в Oct 10, 2014, 13:34
Ще трябва да поясниш как точно искаш да го изпълниш, скрипта ще се намира ли на всяка от машините или само на тази, от която искаш да го изпълниш към останалите...има хиляди решения...крон?


Титла: Re: Помощ за bash скрипт
Публикувано от: Lamqta в Oct 10, 2014, 18:14
Скрипта ще се намира само на една от машините. Логва се със private key, така че не се налага парола.


Титла: Re: Помощ за bash скрипт
Публикувано от: k0tka в Oct 10, 2014, 20:02
А къде ще се запазва output-а, на всяка една от машините или на машината от която се връзваш към другите?

Иначе ето ти няколко примера, които мисля че ще ти помогнат: 1 ($2) и 2 ($2)


Титла: Re: Помощ за bash скрипт
Публикувано от: koue в Oct 13, 2014, 11:22
for server in debian ubuntu centos
do
    echo $server
    ssh $server 'ls /path/to/dir | head -1' | sed -n "s/File\.\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\.\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/`echo $i` is created on \1\/\2\/\3 at \4:\5:\6/p"
done


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 08, 2014, 15:31
Да ползвам темата за един... ламерси :( въпрос:

Код
GeSHi (Bash):
  1. tail -f /var/log/messages
  2.  
  3. Dec  8 15:21:11 localhost .........
  4. Dec  8 15:21:32 localhost .........

Между Dec и 8 има два спейса. Иска да задам това "Dec  8" като променлива, но ако опитам с:

Код
GeSHi (Bash):
  1. today=`date +"%b   %d"`
  2. echo $today
  3. Dec 08
, го сетва само с един спейс :( и добавя 0

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

grep "Dec  08" /var/log/messages |grep


Титла: Re: Помощ за bash скрипт
Публикувано от: neter в Dec 08, 2014, 16:01
Замени
Код
GeSHi (Bash):
  1. today=`date +"%b   %d"`
със
Код
GeSHi (Bash):
  1. today=`date +"%b %e"`
за да имаш два интервала при дати, по-малки от 10, и един интервал при по-големи дати, и да не те заблуждава изходът от echo :)


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 08, 2014, 16:49
Замени
Код
GeSHi (Bash):
  1. today=`date +"%b   %d"`
със
Код
GeSHi (Bash):
  1. today=`date +"%b %e"`
за да имаш два интервала при дати, по-малки от 10, и един интервал при по-големи дати, и да не те заблуждава изходът от echo :)

Дам и аз точно преди малко се усетих, че мога да ползвам поредния ден от месеца, вместо числото като дата.
Мерси ;)


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 21, 2014, 18:48
Поредната питанка
Мъча се тука от... известно :) време със следния скрипт:

1) Искам да проверява дали дадено ПС в мрежата не е "сменено" с друго (физически отпада и се вдига друго на негово място) -> За целта правя: arping IP и следя мак-а.

2) Ако ПС-то е друго, искам да стартирам httpd на машината от която правя проверката -> тука е ясно
3) При връщане на отпадналото ПС, да спра httpd на машината от която правя проверката -> тука вече не ми е ясно как да стане :)

Какво имам до момента:

Код
GeSHi (Bash):
  1. missingpc=`arping -c 1 192.168.1.1 | grep from |awk '{print $4}'`
  2.        if [ $missingpc = 00:11:22:33:44:55 ];then
  3. echo 0 > /var/log/missingpc.status
  4. exit
  5.        else
  6. echo 1 > /var/log/missingpc.status
  7.        fi
  8.  
  9. status=`cat /var/log/missingpc.status`
  10.                if [ $status -eq 0 ];then
  11. echo "No change"
  12.                else
  13. echo "Missing PC, lets start local httpd"
  14.                fi
  15.  


При еднократно стартиране е ОК, но аз искам да го забия в кронтаб-а да проверява на всеки 3мин. Съответно при повторното стартиране, ще види отново, че 192.168.1.1 е с нов MAC и ще се опита пак да стартира httpd, а аз искам да exit-ва, ако вече е стартиран.
Мога да проверявам с netstat -na |grep :80 , и да излиза от скрипта, но не мога да определя как да вмъкна тази проверка :(


Титла: Re: Помощ за bash скрипт
Публикувано от: k0tka в Dec 22, 2014, 17:35
Ако условието с мак адреса не е задължително (тъй като на мен проверка по мак адрес не ми се струва уместна за това дали уеб сървъра работи или не) можеш да правиш следното


Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. /usr/bin/wget --timeout=2 --tries=1 127.0.0.1
  4.  
  5. if [ "$?" -eq "0" ]; then
  6.        echo "Remote webserver is running"
  7.        echo "Checking for local web server pids..."
  8. /sbin/pidof httpd
  9.        if [ "$?" -eq "0" ]; then
  10.        echo "Stopping local webserver"
  11.                /etc/init.d/httpd stop
  12.        fi
  13. else
  14.        echo "Remote webserver is down, starting local httpd"
  15. /etc/init.d/httpd start
  16. fi


Нужно е само да смениш ip адреса тъй като аз тествам локално - ако е пуснат го спира, ако е спрян го пуска на локалната машина тъй като за remote използвам localhost-а и можеш да си пренасочиш stdout, stderr към /dev/null но го тествай естествено преди да пренасочваш.
Хубаво е да се добавят и още проверки...например дали след /etc/init.d/httpd stop реално е спрял или направо с kill...
Не съм сигурен че изцяло разбирам проверката на MAC-а и защо трябва да е нов при повторно стартиране на remote сървъра, но можеш да използваш части от горното за твоя скрипт.


Титла: Re: Помощ за bash скрипт
Публикувано от: neter в Dec 22, 2014, 19:01
Поредната питанка
Не ти трябва писане на статуси във външен файл, освен ако не искаш да си пазиш някакъв лог (което не е видно от това, което си написал). За проверката на стартиран httpd има много варианти, но щом те радва с netstat, в примера по-долу ти го давам с netstat, като съм добавил извеждане и на имената на процесите и grep-ване за httpd, че да не стане грешка, ако си пуснал друг процес на порт 80. Всъщност, при това проверката за порт 80 може да отпадне, но пък, ако остане, ще ти подсигурява, че става дума за httpd-то на порт 80, така че ти си решаваш. Командите за пускане и спиране на httpd ще си ги допишеш сам, че твърде много варианти станаха напоследък :)

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}')
  4. httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd)
  5.  
  6. if [[ "$testPC" == "00:11:22:33:44:55" ]]; then
  7.    if [[ "$httpdStatus" != "" ]]; then
  8.        #Команда за спиране на httpd
  9.    fi  
  10. else
  11.    if [[ "$httpdStatus" == "" ]]; then
  12.        #Команда за стартиране на httpd
  13.    fi  
  14. fi


Титла: Re: Помощ за bash скрипт
Публикувано от: romeo_ninov в Dec 23, 2014, 00:17
....
httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd)
....
Може и с
service httpd status
или
wget http://ip|grep нещоси


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 23, 2014, 07:44
Ако условието с мак адреса не е задължително (тъй като на мен проверка по мак адрес не ми се струва уместна за това дали уеб сървъра работи или не) можеш да правиш следното


Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. /usr/bin/wget --timeout=2 --tries=1 127.0.0.1
  4.  
  5. if [ "$?" -eq "0" ]; then
  6.        echo "Remote webserver is running"
  7.        echo "Checking for local web server pids..."
  8. /sbin/pidof httpd
  9.        if [ "$?" -eq "0" ]; then
  10.        echo "Stopping local webserver"
  11.                /etc/init.d/httpd stop
  12.        fi
  13. else
  14.        echo "Remote webserver is down, starting local httpd"
  15. /etc/init.d/httpd start
  16. fi


Нужно е само да смениш ip адреса тъй като аз тествам локално - ако е пуснат го спира, ако е спрян го пуска на локалната машина тъй като за remote използвам localhost-а и можеш да си пренасочиш stdout, stderr към /dev/null но го тествай естествено преди да пренасочваш.
Хубаво е да се добавят и още проверки...например дали след /etc/init.d/httpd stop реално е спрял или направо с kill...
Не съм сигурен че изцяло разбирам проверката на MAC-а и защо трябва да е нов при повторно стартиране на remote сървъра, но можеш да използваш части от горното за твоя скрипт.

Условието за МАК-а е за да знам, че физически 192.168.1.1 е подмненен с друг сървър.

Поредната питанка
Не ти трябва писане на статуси във външен файл, освен ако не искаш да си пазиш някакъв лог (което не е видно от това, което си написал). За проверката на стартиран httpd има много варианти, но щом те радва с netstat, в примера по-долу ти го давам с netstat, като съм добавил извеждане и на имената на процесите и grep-ване за httpd, че да не стане грешка, ако си пуснал друг процес на порт 80. Всъщност, при това проверката за порт 80 може да отпадне, но пък, ако остане, ще ти подсигурява, че става дума за httpd-то на порт 80, така че ти си решаваш. Командите за пускане и спиране на httpd ще си ги допишеш сам, че твърде много варианти станаха напоследък :)

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}')
  4. httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd)
  5.  
  6. if [[ "$testPC" == "00:11:22:33:44:55" ]]; then
  7.    if [[ "$httpdStatus" != "" ]]; then
  8.        #Команда за спиране на httpd
  9.    fi  
  10. else
  11.    if [[ "$httpdStatus" == "" ]]; then
  12.        #Команда за стартиране на httpd
  13.    fi  
  14. fi

Добре, скрипта работи когато 192.168.1.1 с мак 00:11:22:33:44:55 е на линия, но не и ако се появи новия 192.168.1.1 който има мак 00:aa:bb:cc:dd:ee на мястото на 00:11:22:33:44:55

Код
GeSHi (Bash):
  1. ++ arping -c 1 192.168.1.1
  2. ++ grep from
  3. ++ awk '{print $4}'
  4. + testPC=00:aa:bb:cc:dd:ee
  5. ++ netstat -an
  6. ++ grep .80
  7. + httpdStatus='tcp4       0      0  192.168.1.1.445     192.168.1.204.3806    ESTABLISHED
  8. tcp4       0      0  *.80                   *.*                    LISTEN'
  9. + [[ 00:aa:bb:cc:dd:ee == \0\0\:\a\a\:\b\b\:\c\c\:\d\d\:\e\e ]]
  10. + [[ tcp4       0      0  192.168.1.1.445     192.168.1.204.3806    ESTABLISHED
  11. tcp4       0      0  *.80                   *.*                    LISTEN == '' ]]


Ще се опитам пак да го скицирам :)

192.168.1.1 има httpd, обаче спира тока.
Нашия скрипт, пуснат в кронтаб-а на 192.168.1.10, първо праща WOL пакет и буди новия 192.168.1.1 - 00:aa:bb:cc:dd:ee Тъй като той (00:aa:bb:cc:dd:ee) няма httpd, за това на същата тази машина 192.168.1.10, нашия скрипт тярбва да стартира и httpd (след като 00:aa:bb:cc:dd:ee е UPнат).
От своя страна събудилия се нов 192.168.1.1, автоматично пренасочва всички заявки за порт 80 към 192.168.1.10 и всичко е 6 точки.

"Дистрото" е FreeBSD (192.168.1.10) и липсва параметър -p на netstat, което не е фатално де, просто пояснявам за да няма ползване на липсващи команди :)

....
httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd)
....
Може и с
service httpd status
или
wget http://ip|grep нещоси

Нямам service (FreeBSD), а и ми трябва проверката по MAC-а :)


Титла: Re: Помощ за bash скрипт
Публикувано от: romeo_ninov в Dec 23, 2014, 08:17

Дистрото е FreeBSD (192.168.1.10) и липсва параметър -p на netstat, което не е фатално де, просто пояснявам за да няма ползване на липсващи команди :)

....
httpdStatus=$(netstat -anp | grep ':80 ' | grep httpd)
....
Може и с
service httpd status
или
wget http://ip|grep нещоси

Нямам service (FreeBSD), а и ми трябва проверката по MAC-а :)
Като начало FreeBSD не е дистрибуция, а операционна система
Освен това може да се провери за демон и с curl, даже и с telnet :)


Титла: Re: Помощ за bash скрипт
Публикувано от: neter в Dec 23, 2014, 11:05
Както romeo_ninov каза, FreeBSD не е дистрибуция, а отделна и различна операционна система. Когато в този форум се зададе въпрос в раздел, извън BSD секцията, и не се спомене, че става дума за друга операционна система, по подразбиране се приема, че става дума за Linux. В такива случаи е задължително да споменаваш операционната система, за която става дума, за да не стават обърквания - FreeBSD не е Linux и е различен от него.

За скрипта. Аз го написах за bash. Имаш ли bash? Ако имаш, той в /bin/bash ли е? Ако не е, смени пътя до него в началото на скрипта. Ако нямаш bash, ще си го качиш ли, или да пренаписваме скрипта за твоя shell? Ако ще го пренаписваме, кой е твоят shell, че да не пропуснем нещо?
Да, в *BSD варианта на netstat параметърът "-p" има друга функция (указване на протокол), така че отпада от командата в случая. Трябва обаче да смениш и изписването на порт 80, защото и то е различно:
Код
GeSHi (Bash):
  1. httpdStatus=$(netstat -an | grep '*.80 ')
Провери си и дали твоят cron знае за пътищата до arping, netstat и httpd, и ако не ги знае, ползвай пълни пътища или си ги опиши в PATH променливата.
Надолу if-овете са си екстра, стига правилно да си изписал MAC адреса и командите за пускане и спиране на httpd.


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 23, 2014, 12:44
Както romeo_ninov каза, FreeBSD не е дистрибуция, а отделна и различна операционна система. Когато в този форум се зададе въпрос в раздел, извън BSD секцията, и не се спомене, че става дума за друга операционна система, по подразбиране се приема, че става дума за Linux. В такива случаи е задължително да споменаваш операционната система, за която става дума, за да не стават обърквания - FreeBSD не е Linux и е различен от него.

За скрипта. Аз го написах за bash. Имаш ли bash? Ако имаш, той в /bin/bash ли е? Ако не е, смени пътя до него в началото на скрипта. Ако нямаш bash, ще си го качиш ли, или да пренаписваме скрипта за твоя shell? Ако ще го пренаписваме, кой е твоят shell, че да не пропуснем нещо?
Да, в *BSD варианта на netstat параметърът "-p" има друга функция (указване на протокол), така че отпада от командата в случая. Трябва обаче да смениш и изписването на порт 80, защото и то е различно:
Код
GeSHi (Bash):
  1. httpdStatus=$(netstat -an | grep '*.80 ')
Провери си и дали твоят cron знае за пътищата до arping, netstat и httpd, и ако не ги знае, ползвай пълни пътища или си ги опиши в PATH променливата.
Надолу if-овете са си екстра, стига правилно да си изписал MAC адреса и командите за пускане и спиране на httpd.

ОК, съгласен съм. Исках друго да кажа, но то какво стана :) Знам разликата, а не споменавам, защото смятам, че сам мога да оправя пътя на командите. Имах затруднения в логиката.

Да имам баш и мисля, че се вижда от дебъга или греша?Ето пак за всеки случай:

bash --help
GNU bash, version 3.2.25(0)-release-(i386-portbld-freebsd7.0)


Пътя е сменен, но дори и да не е, пробвах скрипта ти без двойните [ и с разни други промени, но без резултат, въпреки, че има логиката да работи.
Порта е сменен което също се вижда от дебъга който съм постнал.

Ще се повторя, но пак ще кажа: Скрипта работи само когато ИП с МАК 00:11:22:33:44:55 е на линия. От което автоматично следва, че всички пътища до въпросните команди са ОК.
Ако сменя ИП-то към което пращам arp или сменя порта на несъществуващ, скрипта не работи. Влиза в 3тия if и не изпълнява командата:

Код
GeSHi (Bash):
  1. bash -x /custom/mac_check_v2.sh
  2. ++ arping -c 1 192.168.1.1
  3. ++ grep from
  4. ++ awk '{print $4}'
  5. + testPC=00:aa:bb:cc:dd:ee
  6. ++ netstat -an
  7. ++ grep .80
  8. ++ tail -n 1
  9. ++ awk '{print $4}'
  10. ++ cut -c3-4
  11. + httpdStatus=80
  12. + [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
  13. + [[ 80 == '' ]]


и когато всичко е ОК

Код
GeSHi (Bash):
  1. bash -x /custom/mac_check_v2.sh
  2. ++ arping -c 1 192.168.1.1
  3. ++ grep from
  4. ++ awk '{print $4}'
  5. + testPC=00:11:22:33:44:55
  6. ++ netstat -an
  7. ++ grep .80
  8. ++ tail -n 1
  9. ++ awk '{print $4}'
  10. ++ cut -c3-4
  11. + httpdStatus=80
  12. + [[ 00:11:22:33:44:55 == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
  13. + [[ 80 != '' ]]
  14. + echo 'Main PC is here, lets stop httpd'
  15. Main PC is here, lets stop httpd

Скрипта:

 
Код
GeSHi (Bash):
  1. #!/usr/local/bin/bash
  2.  
  3.    testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}')
  4.    httpdStatus=$(netstat -an | grep '.80' | tail -n 1 | awk '{print $4}' |cut -c3-4)
  5.  
  6.    if [[ "$testPC" == "00:11:22:33:44:55" ]]; then
  7.       if [[ "$httpdStatus" != "" ]]; then
  8.           echo "Main PC is here, lets stop httpd"
  9.       fi
  10.    else
  11.       if [[ "$httpdStatus" == "" ]]; then
  12.           echo "Main PC missing, lets start httpd"
  13.       fi
  14.    fi

Разбира се, може и аз да бъркам покрай всичките тези промени и средата която ползвам (/bin/csh).



Титла: Re: Помощ за bash скрипт
Публикувано от: neter в Dec 23, 2014, 14:12
Влиза в 3тия if и не изпълнява командата:
Изглежда, че очакваш след тези два реда
Цитат
+ [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
+ [[ 80 == '' ]]
да видиш ред
Цитат
echo 'Main PC missing, lets start httpd'
само че няма как да го видиш, защото httpd вече е стартиран. Ще го видиш, ако при влизането в този if имаш спрян httpd.

П.П.: И стига си махал интервала след числото 80 в netstat командата - нарочно съм ти добавил този интервал, за да не ти се получава колизия с евентуален процес, който може да бъде пуснат на порт 800 и да ти счупи проверката :) Върни и звездичката пред точката на порта в netstat командата, че да избегнеш и колизия с IP, съдържащо ".80".


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 23, 2014, 16:36
Влиза в 3тия if и не изпълнява командата:
Изглежда, че очакваш след тези два реда
Цитат
+ [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
+ [[ 80 == '' ]]
да видиш ред
Цитат
echo 'Main PC missing, lets start httpd'
само че няма как да го видиш, защото httpd вече е стартиран. Ще го видиш, ако при влизането в този if имаш спрян httpd.

П.П.: И стига си махал интервала след числото 80 в netstat командата - нарочно съм ти добавил този интервал, за да не ти се получава колизия с евентуален процес, който може да бъде пуснат на порт 800 и да ти счупи проверката :) Върни и звездичката пред точката на порта в netstat командата, че да избегнеш и колизия с IP, съдържащо ".80".

Добре, приемам критиката, върнах ги :)
Тогава какво правим при пуснат httpd на 192.168.1.10 и завърнал се 192.168.1.1 с MAC 00:11:22:33:44:55? Искам тоя httpd да го спра.


Титла: Re: Помощ за bash скрипт
Публикувано от: romeo_ninov в Dec 23, 2014, 16:40

Добре, приемам критиката, върнах ги :)
Тогава какво правим при пуснат httpd на 192.168.1.10 и завърнал се 192.168.1.1 с MAC 00:11:22:33:44:55? Искам тоя httpd да го спра.
Крон + спиране на демона


Титла: Re: Помощ за bash скрипт
Публикувано от: neter в Dec 23, 2014, 22:38
Тогава какво правим при пуснат httpd на 192.168.1.10 и завърнал се 192.168.1.1 с MAC 00:11:22:33:44:55? Искам тоя httpd да го спра.
Тогава ще влезеш в if-овете, които водят до това
Код
GeSHi (Bash):
  1. echo "Main PC is here, lets stop httpd"
и httpd ще бъде спрян. Струва ми се, че не успяваш да си представиш добре обхвата на ситуациите от if-овете. Пробвай скрипта в по-реално изпълнение, за да добиеш представа.


Титла: Re: Помощ за bash скрипт
Публикувано от: mrowcp в Dec 24, 2014, 07:35
Тогава какво правим при пуснат httpd на 192.168.1.10 и завърнал се 192.168.1.1 с MAC 00:11:22:33:44:55? Искам тоя httpd да го спра.
Тогава ще влезеш в if-овете, които водят до това
Код
GeSHi (Bash):
  1. echo "Main PC is here, lets stop httpd"
и httpd ще бъде спрян. Струва ми се, че не успяваш да си представиш добре обхвата на ситуациите от if-овете. Пробвай скрипта в по-реално изпълнение, за да добиеш представа.

Напълно си прав! :) Мерси за търпението и за помоща. Весели празници ;)