2016-05-25 3 views
0

У меня есть программное обеспечение (в основном python, .sh и cron и т. Д.) В Git, которое я сбрасываю во время загрузки моего Pi, чтобы я всегда имел последние код работает. Я новичок в Unix и Git. У меня есть несколько Pis, поэтому я эффективно пытаюсь автоматизировать распространение и постоянно обновлять их каждый раз при загрузке.Один раз только сценарий загрузки на pi

У меня есть DB DB, и я только что добавил несколько новых таблиц.

Теперь я хочу, чтобы вытащить файл сценария, который создаст таблицу, и установит некоторые значения по умолчанию, но я не хочу делать это каждый раз, когда я загружаюсь, или он будет потенциально устанавливать значения данных обратно по умолчанию при каждой загрузке ... ничего хорошего.

Что мне до сих пор является .sh-файл, который запускается через crontab при перезагрузке. Этот файл делает Git pull, затем перемещает файлы и сортирует вещи.

Что я планировал сделать, это добавить команду по линии следующих моей загрузки .sh файл:

sudo MySQL --batch -h localhost -u root --password=PASSWORD -D databasename <sqlscript> outfile.log 

sqlscript файл будет содержать CREATE TABLE команды, UPDATE т.д.

Но что я не могу сработать, так это только один раз?

Рассмотренные варианты:

  • я мог удалить с sqlscript после того как я запустить его, но я тогда получаю сообщение об ошибке из файла .sh каждый раз, когда я загрузиться.

  • Я мог бы заменить файл .sh после его запуска один раз одним без команды MYSQL в нем ... но тогда, если Pi отстает от версий и перескакивает несколько версий при обновлении, я бы пропустил промежуточный .sh с таблицами SQL:

  • Я мог бы сделать что-то действительно сложное, добавив номера версий по всему месту, но пока это слишком много.

  • Возможно, я мог бы проверить, не существует ли таблицы, даже выбрав из таблицы TABLES, если она пропустит скрипт, если не произведет его? Это в настоящее время, вероятно, путь вперед, любой получил образец сценария, чтобы проверить это ... Я не делал, если инструкции в сценарии оболочки раньше.

Я подозреваю, что это было сделано много раз, поэтому любой совет приветствуется.

ответ

0

Вы можете создать файл флаг, скажет

/root/run-database-init 

Он не должен содержать ничего, просто существует, как вы будете испытывать для своего существования в своих сценариях и удалить его позже:

if [ -f /root/run-database-init ]; then 
    # do stuff with mysql... 
    rm /root/run-database-init 
fi 
+0

отлично, спасибо Жан-Карим, Я сделал это наоборот, и это сработало как шарм ... – Shedzoy

0

Я сделал это:

если![-f chkfile]; затем

сенсорный chkfile

MySQL бла бла

еще

эхо Найдено chkfile так вприпрыжку таблица создает

фи

(не знаю, почему его не отступов, но 2 char indents)

Смежные вопросы