Добрейшего дня!
Трабл. Есть скрипт ip-up, который отрабатывает при подключении pptp-клиента. Есть скрипт, назову его условно connect, которому передаются параметры от ip-up. Скрипты на bash. Все прекрасно работает.
Возникла необходимость переписать bash-скрипт на python3. Скрипт умеет принимать параметры. Проблем тут нет. Проблема возникает когда, я пытаюсь передать параметры от ip-up.
То есть connect(bash) принимает параметры, а connect(python) не воспринимает их.
Если запускаю вручную в терминале (debian 8):
Все четко. Добавил в код вывод значений передаваемых параметров в файл. Все красиво выводится. Вывод: скрпт работает.
Ок! В скрипте ip-up добавляю строку на запуск моего скрипта. Вангую гневные комменты. Да, я знаю, есть папочка ip-up.d. Оттуда скрипты запускаются сами при коннекте. В данном случае не принципиально. На bash скрипт прекрасно запускался и путем прописывания команды на его запуск прямо в ip-up скрипте с параметрами.
Дак вот, подшаманил скрипт на питоне, чтобы тот признаки жизни подавал при старте и получается картина такая.
Клиент подключается -> стартует ip-up и запускает скрипт python c параметрами-> стартует скрипт python, доходит до места где параметры заносятся в переменные и встает.
Повторюсь, ip-up скрипт точно передает параметры. Проверено на другом принимающем их скрипте, но на bash. Python-скрипт понимает параметры. При ручном запуске скрипта, он успешно отрабатывает.
Проблема, что автоматически эта конструкция не работает у меня. Есть идеи? Спасибо!
1. Да
2. Да=)
и кавычки `` для строки пробовал. Не понимаю в чем проблема.
Если делаю echo в файл и потом строку из файла копирую, вставляю в консоль. Жму enter - чудеса и все работает.
В результате в файл должны быть записаны переданные bash скриптом параметры (1, 2, 3).
ВНИМАНИЕ! Запускаю bash. И все работает. Файл создается, параметры в него пишутся.
Ну ОК, думаю. Пихаю строчку запуска в ip-up. Заостряю внимание на том, что сейчас никаких переменных в bash нет. Я тупо передаю 1, 2 и три. И Да, раз, два, три я тоже пробовал.
Итак, запускаю самостоятельно скрипт ip-up. Файл good создается параметры есть в нем. Делаю реконнект клиента для автоматического срабатывания ip-up.
C**А!!!! Файл good.txt создан. НО ОН ПУСТОЙ. ЧТО ТЫ ТАКОЕ???!!!CHMOD какой-то.
P.S. chmod +x делал. Мэй би кодировка?
Знаешь, когда я бодался с запуском python скрипта из крона, то выяснилось, что environment в таком случае для питона - голый. Пришлось прописать все нужное вручную. Может быть, в этом дело?
Сейчас уже упростил задачу вовсе. Скрипт просто записывает в файл текстовый строку. Без каких-либо переменных. Ручной запуск работает. При вызове через ip-up файл создается, но пустой. Скрипт лежит в /etc/ppp/ip-up.d/. В скрипте прописан интерпретатор питона первой строкой. Он исполняемый. Т.е. дабл-клик по нему и все - файлик есть. В файлике строка. При коннекте клиента скрипт успешно стартует. Создает файл, но пустой.
Судя по всему действует так сам ip-up. Пытаюсь выяснить почему :(
т.е. скрипт ip-up сейчас оригинальный, без коррективов. Если его запустить в mc руками, то скрипт python из папки ip-up.d срабатывает как надо. Создает файл со строкой внутри.
что только не пробовал. Уже через вызов внешней программы, которая запускает скрипт и передает ему параметры. Суть такова. Скрипт запущенный в любом месте и любым образом работает. При запуске с использованием ip-up действуют некие ограничения ввода/вывода, которые мешают корректной работе скрипта.
Для усиления защиты он выполняется в преднамеренно ограниченном окружении. Это означает, что вы должны указывать полный путь к запускаемым файлам внутри скриптов и т.д. Технически /etc/ppp/ip-up - это программа, а не скрипт. Это означает, что он может быть всё таки выполнен - и следовательно, ему потребуется стандартный файл (#!/bin/bash) в начале первой строки скрипта, также он должен быть читаемым и исполняемым от пользователем root.»
Про полные пути понятно, А вот что конкретно таит в себе преднамеренно ограниченное окружение не совсем понятно. Но ограничения эти накладываются на все запущенные через ip-up скрипты и/или программы. Как я понял ввод/вывод происходит иначе, чем при ручном запуске скриптов. И дело тут нев правах и путях, а именно в самом принципе работы ip-up/down. Есть у кого какие мысли на этот счет? Не хочется переделывать python обратно на bash :(
Попробовал набросать скрипт на lua. Получилось принять параметры от ip-up и даже в файл все красиво записалось. Никаких манипуляций не пришлось делать ни с правами, ни с кавычками. Буду переписывать скрипт на lua. Одна проблема, что я в нем пока не шарю. Придется разбираться сразу на практике. Самое время для быдлокода=))