Cron Job в Linux

Вопрос или проблема

Я новичок, и у меня есть сомнение,

У меня есть Outer.sh, который нужно запускать при каждом появлении zip-файла на FTP, и извлекать **.sh файл внутри zip-файла и выполнять этот (*.sh) файл, который находится внутри zip-файла.

Возможно ли выполнить inner.sh с помощью CronJobs Outer.sh………?

Пожалуйста, помогите мне понять. Ниже приведена просто примерная структура.

***Outer.sh
    --для выполнения каждого файла, который приходит
FTP
  --file1.zip
  --file2.zip

file1
      --**.xml
      --**.doc
      --cronInner.sh

В вашем Outer.sh скрипте файлы из ftp будут извлечены.
Предполагая, что файлы будут помещены в каталог, где нет других файлов, и что .sh файлы, которые были переданы по ftp, безопасны для выполнения.

Outer.sh

# читать файлы в директории ftp
# извлекать zip-файлы в временную директорию

cd tmp
for f in *.sh
do
   chmod +x $f  # обеспечить исполняемость
   ./$f         # выполнить "внутренний" скрипт
done

# удалить файлы из временной директории

Ответ или решение

Cron Job в Linux

Вам необходимо настроить выполнение скрипта Outer.sh каждый раз, когда в директории FTP появляется новый ZIP-файл, который необходимо распаковать и выполнить содержащийся в нем скрипт inner.sh. Ваша задача — реализовать это с помощью cron job.

Что такое Cron Job?

Cron — это встроенный демон в Unix-подобных системах, который периодически выполняет заданные команды или скрипты по предустановленному расписанию. Это удобный инструмент для автоматизации задач, таких как резервное копирование, синхронизация данных и, как в вашем случае, выполнение скриптов.

Настройка Cron Job

  1. Создайте скрипт Outer.sh

Вот пример вашего скрипта Outer.sh, который будет извлекать ZIP-файлы и выполнять скрипт inner.sh:

#!/bin/bash

# Папка с FTP файлами
FTP_DIR="/path/to/FTP"
TMP_DIR="/path/to/tmp"

# Переход в директорию с ZIP файлами
cd "$FTP_DIR"

# Извлечение ZIP файлов
for zip_file in *.zip; do
    if [[ -f "$zip_file" ]]; then
        # Создаем временную директорию для распаковки
        mkdir -p "$TMP_DIR"
        unzip "$zip_file" -d "$TMP_DIR"

        # Переход в временную директорию
        cd "$TMP_DIR"

        # Выполнение всех .sh скриптов
        for f in *.sh; do
            chmod +x "$f"  # Убедитесь, что файл исполняемый
            ./"$f"         # Выполнение скрипта
        done

        # Возврат в директорию FTP
        cd "$FTP_DIR"

        # Удаление обработанного ZIP файла
        rm "$zip_file"

        # Очистка временной директории
        rm -rf "$TMP_DIR/*"
    fi
done
  1. Настройка Cron

Чтобы cron job запускал ваш скрипт на регулярной основе, откройте файл crontab для редактирования:

crontab -e

Добавьте следующую строку, чтобы запускать Outer.sh каждые 5 минут, например:

*/5 * * * * /path/to/Outer.sh

Пояснение работы скрипта Outer.sh

  • cd "$FTP_DIR": Переход в директорию, где хранятся ZIP-файлы.

  • unzip "$zip_file" -d "$TMP_DIR": Команда извлекает содержимое ZIP-файлов во временную директорию.

  • chmod +x "$f": Убедитесь, что каждый скрипт имеет разрешение на выполнение.

  • ./"$f": Команда выполняет скрипт inner.sh.

  • rm "$zip_file" и *rm -rf "$TMP_DIR/"**: Эти команды чистят директорию, удаляя уже обработанные файлы.

Замечания по безопасности

  • Перед выполнением любого скрипта, извлеченного из ZIP-файла, убедитесь, что он безопасен. Запуск непроверенного кода может привести к уязвимостям в вашей системе.

  • Регулярно проверяйте журналы выполнения cron и системные логи для обнаружения возможных ошибок.

Заключение

Используя cron job и ваш скрипт Outer.sh, вы можете автоматизировать процесс обработки новых ZIP-файлов и выполнения содержащихся в них скриптов. Это позволит вам значительно упростить работу с файлами и сэкономить время на ручные операции. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...