LinuxForum.Fans
Тема

[Решено] Вопрос новичка: не работают shell-скрипты

Автор: CanSee 21 сообщений 5917 просмотров
#49080

Привет всем.
У меня такая проблема: не работает shell-скрипт.
Скрипт должен делать простую вещь - восстанавливать из архива сайт на drupal с файлами и базой данных. Сначала должен удалять папку с файлами сайта, потом извлекать на их место такую же папку из архива, потом запускает mysql для восстановления базы, потом меняет права доступа на извлечённые из архива файлы. Все команды, которые есть в скрипте, проверены. Если их вводить в терминале вручную - они выполняются нормально. Но вот если запускаю скрипт, в котором по очереди идут те же самые команды - получаю кучу ошибок о том, что указанных файлов и каталогов не существует. На команду "cd /var/www" пишет: ": Нет такого файла или каталогаd: /var/www" (почему-то именно так, с буковкой "d" после "каталога"). Но каталог есть! И если просто набрать в терминале то же самое - каталог меняется на этот самый несуществующий /var/www.
Скрипт выполняется из-под рута, так что проблемы с правами доступа маловероятны.
Несмотря на то, что файл сохранён в кодировке utf8 и локаль в системе указана тоже utf8, я предполагал, что проблемы с кодировкой файла. Но вывод cat показывает нормальное содержимое файла. Попробовал поменять кодировку с utf8 без BOM на utf8 с BOM - никакого эффекта.

Кто знаком с консолью - подскажите пожалуйста, в чём тут может быть дело.

Вывод uname -a:
Linux FiredestU 2.6.32-22-generic #33-Ubuntu SMP Wed Apr 28 13:27:30 UTC 2010 i686 GNU/Linux

#49083

сам скрипт показать не желаете? связь с астралом нынче дорога, да еще и роуминг все дела..

#49086

Конечно.

#!/bin/bash
# Deleting sql file if exists:
rm -f "/var/www/wxnewbase.sql"
# Deleting wx site folder:
rm -r -f "/var/www/wxNew"
# Switching to site folder:
cd "/var/www"
# Extracting last backup from archive into site folder:
7z x "/home/cansee/Projects/Apache/SiteBackups/wxnewsite.7z"
# Restoring database:
mysql -h localhost -u root --password="Password" wxbooksite < "/var/www/wxnewbase.sql"
# Deleting sql file:
rm -f "/var/www/wxnewbase.sql"
# Setting read and execution rights for CPP site folder:
chmod -R 755 "/var/www/wxNew"
# Setting write rights for "sites/default/files" folder:
chmod -R 777 "/var/www/wxNew/sites/default/files"

#49098

проверьте, так и есть что кавычка пропущена или вы сейчас ошиблись?

rm -f "/var/www/wxnewbase.sql
#49099

А попробуй все пути без кавычек прописать.

#49110
system-root написал:
проверьте, так и есть что кавычка пропущена или вы сейчас ошиблись?

Я в сообщении на форуме ошибся. Сейчас поправил. В самом скрипте всё вроде нормально было. Сейчас ещё раз проверил. Скрипт я в gedit набирал, он подсвечивает синтаксис и выделяет розовым всё, что за незакрытой кавычкой. Так что ошибку сразу видно.

kisil написал:
А попробуй все пути без кавычек прописать.

У меня скрипт сначала был вообще без кавычек. Но потом, когда он отказался работать, я взял все пути в кавычки - думал, может дело в этом. Не помогло. Вручную команды в терминале пишу, скопировав с этого же скрипта - работает и с кавычками, и без. Запускаю скрипт - "sudo bash ./RestoreWxSite.sh" - получаю кучу ошибок независимо от наличия кавычек.

#49112

вся проблема в настройках sudo я так понимаю.

#49113
system-root написал:
вся проблема в настройках sudo я так понимаю.

А не будете ли так добры объяснить, что за настройки, как до них добраться, и что там предположительно надо поменять, чтобы скрипты заработали? :)
Я пробовал и чуть-чуть по-другому сделать - из одного терминала запускал второй терминал (впрочем, опять же через sudo), а уже в нём просто набирал команды. Результат был тот же.

#49114
text
cat /etc/sudoers

покажите

#49116

cansee@FiredestU:~$ sudo cat /etc/sudoers
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL

# Allow members of group sudo to execute any command after they have
# provided their password
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
cansee@FiredestU:~$

Попробовал погуглить на тему "настройки sudo", почитать вывод "man sudo". Узнал много нового, но идей по поводу придания скрипту работоспособности не появилось :(

#49117

попробуй в скрипте только одну команду что он скажет, например
#!/bin/bash
# Deleting sql file if exists:
rm -f "/var/www/wxnewbase.sql"
Если не будет ошыбки то добавляй новую, если будет то попробуй без sudo а прямо из под рута.

#49147

Одну команду удаления sql-файла в начале скрипта оставлять большого смысла нет, потому что в большинстве случаев этот файл до запуска скрипта отсутствует. И команда при этом ошибки не возвращает. Есть файл, нет файла - всё равно отрабатывает успешно. И следующая тоже, которая должна директорию удалять. А вот уже cd "/var/www" пишет, что нету такого каталога "/var/www".
Попробую оставить только cd "/var/www" - может появится какая-то новая информация.
Ещё дополнение - есть похожий скрипт, но не для восстановления, а для бэкапа сайта. Скрипт бэкапа файлы из /var/www только читает, архив с бэкапом пишется в пользовательскую директорию, поэтому права рута ему не нужны и запускается он без sudo. И отрабатывает нормально. Так что проблема похоже действительно в sudo. Но вот что там надо поменять, чтобы заработало...

#49155
CanSee написал:
Одну команду удаления sql-файла в начале скрипта оставлять большого смысла нет, потому что в большинстве случаев этот файл до запуска скрипта отсутствует. И команда при этом ошибки не возвращает. Есть файл, нет файла - всё равно отрабатывает успешно. И следующая тоже, которая должна директорию удалять. А вот уже cd "/var/www" пишет, что нету такого каталога "/var/www".
Попробую оставить только cd "/var/www" - может появится какая-то новая информация.
Ещё дополнение - есть похожий скрипт, но не для восстановления, а для бэкапа сайта. Скрипт бэкапа файлы из /var/www только читает, архив с бэкапом пишется в пользовательскую директорию, поэтому права рута ему не нужны и запускается он без sudo. И отрабатывает нормально. Так что проблема похоже действительно в sudo. Но вот что там надо поменять, чтобы заработало...

Приведите этот скрипт как вложение, лучше в заархивированном виде (gzip <name>).

Пётр.

#49158

Прилагаю скрипт, запакованный в архив "gz".

#49162
CanSee написал:
Прилагаю скрипт, запакованный в архив "gz".

Я, наверное, тупой, но я его не вижу.

Пётр.

#49163

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

#49168
CanSee написал:
Ага, чего-то я накосячил. Почему-то файл не приложился с первого раза.
Отредактировал сообщение, приложил к нему файл. Сейчас он точно есть :)

Да, я скачал. Попробуйте для эксперимента приложенный вариант,
но я ничего не обещаю.

Пётр.

#49173

Байты 0D в конце каждой строки удалены?
Да, наверное в этом было дело. У меня chmod выдавал ошибки наподобие: невозможно получить доступ к "/var/www/wxNew\r".
Так что наверное проблема действительно с окончаниями строк.
Приду домой - обязательно попробую (сейчас я на работе, здесь у меня только windows).
Спасибо большое :)

#49175

Да, я удалил <CR>.

Пётр.

#49342

Проверил. Да, действительно в этом было дело. Скрипт с нормальными линуксовыми концами строк работает нормально :)
Спасибо :)

Войдите или зарегистрируйтесь, чтобы ответить.