Автор Тема: Скрипты. Общие вопросы по использованию и написанию.  (Прочитано 28910 раз)

Оффлайн Gray77

  • Участник
  • *
  • Сообщений: 85
  • 0000
Re: не исполняется скрипт ip-up
« Ответ #15 : 01.11.2008 22:02:05 »
Поясню - у меня GW VPN-на не статический а динамический и я все его адреса перебрал.

Оффлайн AMike

  • alt linux team
  • ***
  • Сообщений: 479
Re: не исполняется скрипт ip-up
« Ответ #16 : 02.11.2008 02:46:59 »
Вот скрипт:
#!/bin/bash
#!/bin/sh
оставте одно

route add -host 10.0.0.1 gw 10.0.145.254
route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.0.145.254 eth1
route add -host 10.0.1.230 gw 10.0.0.1
route add -host 10.0.1.231 gw 10.0.0.1
route add -host 10.0.1.232 gw 10.0.0.1
route add -host 10.0.1.233 gw 10.0.0.1
route add -host 10.0.1.234 gw 10.0.0.1
route add -host 10.0.1.235 gw 10.0.0.1
route add -host 10.0.1.236 gw 10.0.0.1
route add -host 10.0.1.237 gw 10.0.0.1
route add -host 10.0.1.238 gw 10.0.0.1
route add -host 10.0.1.239 gw 10.0.0.1
route add -host 10.0.1.240 gw 10.0.0.1
route add -host 10.0.1.241 gw 10.0.0.1
route add -host 10.0.1.242 gw 10.0.0.1
route add -host 10.0.1.243 gw 10.0.0.1
route add -host 10.0.1.244 gw 10.0.0.1
route add -host 10.0.1.245 gw 10.0.0.1
route add -host 10.0.1.246 gw 10.0.0.1
route add -host 10.0.1.247 gw 10.0.0.1
route add -host 10.0.1.248 gw 10.0.0.1
route add -host 10.0.1.249 gw 10.0.0.1
route add -host 10.0.1.250 gw 10.0.0.1
Объясните смысл этих маршрутов. Что вы хотели добиться?

Оффлайн Gray77

  • Участник
  • *
  • Сообщений: 85
  • 0000
Re: не исполняется скрипт ip-up
« Ответ #17 : 02.11.2008 07:58:13 »
Первые две строчки - локальная сеть (добавляю путь к шлюзу локалки и к самой сети)
Остальные - это пути к vpn-шлюзу (я предварительно выяснил все ip-адреса своего vpn-шлюза)

Оффлайн Gray77

  • Участник
  • *
  • Сообщений: 85
  • 0000
Re: не исполняется скрипт ip-up
« Ответ #18 : 02.11.2008 08:03:11 »
Объясните смысл этих маршрутов. Что вы хотели добиться?

И кстати, чего я хотел добиться при помощи этого скрипта этого добился и давно.
У меня проблема с автоматизацией процесса подключения VPN.
Приходится через NetworkManager запускать VPN, а скрипт, который по идее должен автоматически исполняться после подключения PPP - ip-up приходится запускать вручную.



Спасибо
« Последнее редактирование: 02.11.2008 08:06:10 от Gray77 »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: не исполняется скрипт ip-up
« Ответ #19 : 02.11.2008 08:23:37 »
Вешайте багу, что ещё можно сказать :)

Оффлайн Gray77

  • Участник
  • *
  • Сообщений: 85
  • 0000
Re: не исполняется скрипт ip-up
« Ответ #20 : 04.11.2008 15:56:50 »
С
route add -host 10.0.0.1 gw 10.0.145.254
route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.0.145.254 eth1
route add -host 10.0.1.230 gw 10.0.0.1
route add -host 10.0.1.231 gw 10.0.0.1
route add -host 10.0.1.232 gw 10.0.0.1
route add -host 10.0.1.233 gw 10.0.0.1
route add -host 10.0.1.234 gw 10.0.0.1
route add -host 10.0.1.235 gw 10.0.0.1
route add -host 10.0.1.236 gw 10.0.0.1
route add -host 10.0.1.237 gw 10.0.0.1
route add -host 10.0.1.238 gw 10.0.0.1
route add -host 10.0.1.239 gw 10.0.0.1
route add -host 10.0.1.240 gw 10.0.0.1
route add -host 10.0.1.241 gw 10.0.0.1
route add -host 10.0.1.242 gw 10.0.0.1
route add -host 10.0.1.243 gw 10.0.0.1
route add -host 10.0.1.244 gw 10.0.0.1
route add -host 10.0.1.245 gw 10.0.0.1
route add -host 10.0.1.246 gw 10.0.0.1
route add -host 10.0.1.247 gw 10.0.0.1
route add -host 10.0.1.248 gw 10.0.0.1
route add -host 10.0.1.249 gw 10.0.0.1
route add -host 10.0.1.250 gw 10.0.0.1
Объясните смысл этих маршрутов. Что вы хотели добиться?

Извините, я разобрался, в действительности достаточно одного маршрута
route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.0.145.254 eth1
Для нормальной работы VPN - приходиться это писать в Шеле после поднятия ppp0 в NM.
Пробовал жестко прописать в /etc/net/ifaces/eth1/ipv4route
10.0.0.0/16 via 10.0.145.254
не помогает.
Если не очень сложно - подскажите  в какой файл надо прописать этот маршрут для того, чтобы не писать его каждый раз вручную или хотябы где об этом можно прочитать.
Прочтение http://linux.yaroslavl.ru/docs/book/lnag/lnag.html - внесло ясность во многие мои вопросы и проблемы, но не ответило на выше указанный вопрос (возможно я просто тормоз и не нашел).


Спасибо

Оффлайн МШ

  • Участник
  • *
  • Сообщений: 492
  • Ковчег
Сабж.
Скрипт следующего содержания:
#!/bin/bash
if ps -A | grep ppp; then
    echo соединение установлено
    if ip addr | grep ppp1; then
        echo по правильном интерфейсу
    else
        echo интерфейс отличается от ppp1 - завершаем pppd и поднимаем интерфейс ppp1
        killall pppd
        sleep 2
        /sbin/ifup ppp1
    fi
else
    echo соединения нет. Поднимаем.
    /sbin/ifup ppp1
fi

Запускается по крону, строчка из crontab:
*/2 * * * * root /var/scripts/check_ppp.sh

Когда запускаю из командной строки, то все нормально: если соединение установлено через правильный интерфейс - ничего не делаем. Если соединение не установлено, то устанавливаем. Если установлено через неправильный интерфейс (например ppp0), то завершаем все pppd,  ждем пару секунд и поднимаем ppp1.

А по крону почему-то первое условие проходит (соединение установлено), а вот второе условие не проходит - делает killall pppd и поднимает соединение опять.

В какую сторону копнуть?

______
РЕШЕНО:
Сам дурак ;)
При запуске по крону указанной строчкой, как я понимаю, пути к /sbin в PATH нет. Поэтому команда ничего не возвращала (кроме того, что команды ip не найдено, но это, как я понимаю, в if не доходит).
А в процессе отладки я работал через su -

ЗЫ Да, измененный скрипт:
#!/bin/bash
pppd_stat=`ps -A | grep pppd`
if test "$pppd_stat"; then
    echo `date +"%F %H:%M"` pppoe установлено >> /var/log/check_ppp.log
    ppp1_exist=`/sbin/ip addr | grep ppp1`
    if test "$ppp1_exist"; then
        echo `date +"%F %H:%M"` Нужный интерфейс запущен >> /var/log/check_ppp.log
    else
        echo `date +"%F %H:%M"` Поднят не тот интерфейс, завершаем все pppd >> /var/log/check_ppp.log
        killall pppd
        sleep 2
        /sbin/ifup ppp1
    fi
else
    echo `date +"%F %H:%M"` pppoe не установлено. Поднимаем ppp1 >> /var/log/check_ppp.log
    /sbin/ifup ppp1
fi
Переменные использую, чтобы в мыло не валился вывод команд.
« Последнее редактирование: 03.12.2008 19:17:02 от МШ »

Оффлайн МШ

  • Участник
  • *
  • Сообщений: 492
  • Ковчег
Все-таки осталась проблема.
Есть такой кусок кода:
firewall.sh
...
if ! test $2; then
    echo "...done"
    echo "--> iptables firewall loaded/activated <--"
fi
...
Запускается из вышеуказанного скрипта такой строчкой:
/var/scripts/firewall.sh restart silent

Т.е. при наличии второго аргумента - echo не выводить. Это чтобы в почту не сыпались лишние письма.

Когда я запускаю это от рута через su -. то все путем - ни одной строчки не выводится.
Когда я запускаю от рута через su (или по крону - строчка в первом сообщени), то это условие не отрабатывается.
Хотя есть в скрипте и такой код:
noip2_stat=`ps -A | grep noip2`
if ! test noip2_stat; then
    /usr/local/bin/noip2
fi
Этот куск отрабатывается как положено.

Вопроса два:
1. как из крона запустить с окружением рута?
Пробовал так:
*/2 * * * * root su -lc "/var/scripts/check_ppp.sh"
Вроде бы не работает (т.е. выполняется как и без su)

2. все-таки хочется понять: почему возникает такая проблема?

Спасибо.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Цитата: man 1 crontab
ИМЯ
     crontab — поддержка файлов      crontab для отдельных пользователей.

ОПИСАНИЕ
     crontab [-u пользователь] файл
     crontab [-u пользователь] [-l | -r | -e]

.....

     -u пользователь   Указывает пользователя, чей crontab( 5 ) должен быть
                       отредактирован.  Если эта опция не указана, crontab
                       использует “ваш” crontab( 5) т.е., crontab пользователя,
                       выполняющего команду.  Обратите внимание, что su( 1 )
                       может “запутать” crontab и при работе через su( 1 )
                       всегда следует использовать опцию -u ради безопасности.
Цитата: man cron

ИМЯ
     cron — демон расписания

ОБЗОР
     cron [-l загрузка_системы] [-n] [-x [ext,sch,proc,pars,load,misc,test]]

ОПИСАНИЕ
     Демон cron занимается планированием и выполнением команд, запускаемых по
     определенным датам и в определенное время. ...
.......
Вывод исполняемой команды отправляется пользователю, указанному в
     переменной окружения MAILTO, как указано в файле crontab( 5 ).  Если
     переменная MAILTO не определена (или если это задача at( 1 ) или batch( 1 )
     ), то сообщение отправляется владельцу задачи.  Сообщение не
     отправляется, если команда не выводит какой-либо информации, или если
     переменная окружения MAILTO является пустой строкой.  Исключением
     являются задачи at( 1 ) или batch( 1 ) созданные с флагом -m.  В этом случае,
     сообщение будет отправлено даже если задача ничего не выводит.

Цитата: man 5 crontab
ИМЯ
     crontab — таблицы, управляющие работой демона cron

ОПИСАНИЕ
     Файл crontab содержит инструкции демону cron( 8 ) в общей форме: запускать
     указанную команду в заданное время и в заданные дни.  На компьютере
     обычно имеются общесистемный файл crontab (/etc/crontab ), и
.........
  Хотя crontab по сути является обыкновенным текстовым файлом, он не должен
     редактироваться обычными средствами.  Для создания, изменения и удаления
     crontab следует использоваться специальную утилиту, crontab( 1 ).

     Пустые строки, ведущие пробелы и символы табуляции игнорируются.  Строки,
     начинающиеся с символа (‘#’), считаются комментариями и игнорируются.
     Заметьте, что комментарии не допускаются в тех же строках, где
     расположены команды cron( 8 ), так как они будут распознаны как части
     команды. По этой же причине комментарии не разрешены в строках, задающих
     переменные среды.

     Строка-директива в crontab представляет собой либо задание переменной
     среды, либо команду cron( 8 )

     Задание переменной среды

     Можно определять среду (набор переменных среды), в которой будет
     выполняться команда crontab.  Задание переменной среды осуществляется в
     следующей форме:

           имя_переменной = значение
« Последнее редактирование: 03.12.2008 22:22:47 от ruslandh »

Оффлайн МШ

  • Участник
  • *
  • Сообщений: 492
  • Ковчег
Цитата: man 1 crontab
ИМЯ
     crontab — поддержка файлов      crontab для отдельных пользователей.
Еще не дочитал;)
Я в ручную ковыряю /etc/crontab. Аналогичным, имхо, способом запускаются и другие задачи от рута:
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
*/2 * * * * root /var/scripts/check_ppp.sh

/* ми ушел читать по пути на работу. ;)

Оффлайн Belua

  • Участник
  • *
  • Сообщений: 102
озаботился следующей проблемой. Есть некий скрипт (файл является выполняемым), нужно запустить его из KDE (например с Рабочего стола) и он должен открыть konsole и выполниться. И вроде простая проблема, никак мне не даётся.

Например:
Цитировать
#!/bin/bash
ssh -l user 10.0.0.1
« Последнее редактирование: 18.08.2011 23:22:21 от МИНЗДРАВ »
Вот случилось где-то что-то Ой-ой-ой-ой-ой! Кто-то с кем-то сделал что-то, ай-яй-яй-яй-яй!

Drool

  • Гость
Re: выполнение скрипта из KDE
« Ответ #26 : 15.12.2008 15:07:13 »
Сделать на него ярлычен, в свтйствах которого поставить галочку "Открывать в терминале" ?

Оффлайн Belua

  • Участник
  • *
  • Сообщений: 102
Re: выполнение скрипта из KDE
« Ответ #27 : 15.12.2008 15:18:58 »
сделал скрипт
сделал ссылку на раб.стол
строку
Цитировать
втйствах которого поставить галочку "Открывать в терминале" ?
нашел в пункте "Открыть с помощью" галочку поставил, но он всё равно требует приложение для открытия, иначе кнопка "ОК" не активна. Пробовал и konsole и /bin/sh/

Вот случилось где-то что-то Ой-ой-ой-ой-ой! Кто-то с кем-то сделал что-то, ай-яй-яй-яй-яй!

Drool

  • Гость
Re: выполнение скрипта из KDE
« Ответ #28 : 15.12.2008 15:31:19 »
Нет, я имел ввиду правой кнопкой по ярлычку - свойства и там где-то есть в крайней закладке "запускать в терминале" или как-то так.

Оффлайн xapienz

  • Участник
  • *
  • Сообщений: 207
Re: выполнение скрипта из KDE
« Ответ #29 : 15.12.2008 15:42:25 »
правой кнопкой на рабочем столе - создать - ссылку на приложение.
на вкладке Приложение в поле Команда ввести ssh -l user 10.0.0.1.
кнопка Дополнительно - Выполнять в терминале.

на рабочем столе создастся .desktop - файл, который можно запустить дабл-кликом.

вариант два.
открыть текстовый редактор, ввести туда такое (примерное содержание):
[Desktop Entry]
Exec=ssh -l user 10.0.0.1
Name=Соединиться
StartupNotify=true
Terminal=true
Type=Application
и сохранить с расширением .desktop на рабочем столе. При этом имя значка будет браться из поля Name
ALTLinux Sisyphus