Как создать сценарии bash для автоматического добавления и загрузки файлов с github?

#linux #bash #git

Вопрос:

У меня есть клонированный каталог на сервере Linux. Настроен доступ с ключом. После некоторой обработки на сервере на выходе я получаю csv-файлы, которые мне нужно добавить в git. Мне также нужно получать файлы на сервере, которые были изменены в самом git (это могут быть либо новые добавленные файлы, либо некоторые изменения в коде). Процесс добавления происходит каждый день, поэтому я хочу его автоматизировать. На одном из сайтов я нашел подходящий для меня пример. Два сценария, которые добавляют и клонируют изменения на сервере. Автоматизация запуска происходит через crontab.

Файл кода:

 #!/bin/bash
# Go to the GIT category
cd '/home/user/www/'

# Submitting changes to the main branch
git checkout main
git add -A
git commit -m "update main"
git push
 

и…

 #!/bin/bash
# Go to the GIT category
cd '/home/user/www/'

# Loading data from the main branch
git checkout main
git pull
 

Но я получаю следующие ошибки в выводе, в чем может быть проблема?

Хронолог:

 /home/user/RFFI-V/Work/start_git_download.sh: line 3: cd: too many arguments
/home/user/RFFI-V/Work/start_git_push.sh: line 3: cd: too many arguments
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 

Комментарии:

1. Что делать, если вы просто запустите cd '/home/user/www/' команду на целевой машине? (Как root, так как crontab работает как root…)

2. Сообщение об ошибке cd: too many arguments , похоже, не соответствует вашим сценариям, как показано в вопросе. Вы скопировали и вставили код, который вы на самом деле используете? Для отладки измените первую строку на #!/bin/bash -x и проверьте результирующий вывод в журнале.

3. ошибка git init или вы клонируете этот каталог?

4. Как показано, я бы сказал, что это должно сработать. Я должен сказать, что это воняет новыми строками в стиле Windows. Есть вероятность, что ваши сценарии являются CRLF? Если это так, bash не совместим с этим, преобразуйте в LF в стиле Unix.

5. Не делай этого. Использование git для хранения контента, созданного не человеком, на самом деле не очень хорошая идея, независимо от того, насколько распространенной она может быть.

Ответ №1:

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

Если вы не получаете никаких проблем, то сценарий bash находится в правильной папке для crontab, и сценарий по умолчанию будет выполняться от имени root, если вы хотите запустить сценарий от имени другого пользователя, пример синтаксиса для настройки сценария для запуска от имени другого пользователя в crontab показан ниже,

1 2 3 4 5 USERNAME /path/to/script.sh