Вопрос или проблема
Я новичок, и у меня есть сомнение,
У меня есть 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
- Создайте скрипт 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
- Настройка 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-файлов и выполнения содержащихся в них скриптов. Это позволит вам значительно упростить работу с файлами и сэкономить время на ручные операции. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.