Вопрос или проблема
Я надеюсь, кто-то сможет указать мне правильное направление. Я хотел бы создать скрипт для проверки новых файлов (файлов с сегодняшней датой) в директории и затем выводить результаты в текстовый файл. Могу ли я использовать cron
или bash
?
правка:
Обновил оригинальную тему. Я попробовал следующее на своей виртуальной машине с Linux Mint, и у меня это сработало. Единственная проблема:
1) когда я создаю новый файл (используя “sudo vi newtextfile.txt”, а затем “:w”), я получаю уведомление по электронной почте 4 раза.
2) вызываю ли я несколько событий IN_CREATE, создавая новый файл с помощью метода, который я упомянул выше?
/xyz/jon >>>
total 12
786436 drwxr-xr-x 2 root root 4096 Jul 13 20:43 .
786434 drwxr-xr-x 4 root root 4096 Jul 13 19:45 ..
786441 -rwxr-xr-x 1 root root 48 Jul 13 20:32 mylogger.sh
786437 -rw-r--r-- 1 root root 0 Jul 13 20:22 mylogtoday.txt
"incron.table-jonincron" >>>
/xyz/client IN_CREATE /xyz/jon/mylogger.sh
/xyz/jon/mylogger.sh >>>
sudo mail -s "тестирование скрипта" [email protected]
Здравствуйте, я надеялся, что кто-то с лучшими знаниями сможет ответить. HP-UX имеет довольно старый инструментальный набор System V, поэтому у вас не будет современных инструментов GNU.
Оболочка posix HP-UX, которая является /usr/bin/sh
, очень близка к ksh93. Поэтому вы можете сравнить возраст двух файлов с помощью [[ file1 -nt file2 ]]
, который возвращает true, если file1
новее, чем file2
. Не используйте /usr/bin/ksh
на HP-UX, это очень старая стандартная оболочка korn (возможно 1982 года).
Вот простой скрипт, который вы можете запускать периодически. Его следует улучшить, чтобы поддерживать файлы со специальными символами в именах и другие возможные ошибки, но я не очень хорош в этом.
Файлы, за которыми следят, находятся в DIR, список новых файлов – /tmp/newfile. Список создается при сравнении всех файлов в DIR с самым младшим файлом, найденным во время последнего запуска, так что он поддерживает создание новых файлов во время выполнения.
Скрипт не поддерживает одновременное выполнение, вам, возможно, придется реализовать блокировки или распределить каждое выполнение с достаточным временным интервалом.
#!/usr/bin/sh
previous=/tmp/previous
new=/tmp/newfiles
DIR=/tmp/aa
if [[ ! -s $new ]]
then
mv "$new" "$previous"
fi
if [[ ! -f "$previous" ]]
then
ls -rt "$DIR" > "$new"
exit
fi
ref=$(tail -1 "$previous")
if ! cd "$DIR"
then
echo не удается перейти в "$DIR"
exit 1
fi
ls -rt | while read file
do
if [[ "$file" -nt "$ref" ]]
then
echo "$file"
fi
done > "$new"
Вы можете запустить его в cron, например:
каждые пять минут (обратите внимание, что crontab hp-ux не поддерживает синтаксис *5)
0,5,10,15,20,25,30,35,40,45,55 * * * * /myscript.sh >>/var/adm/myscript.log 2>&1
каждый час
0 * * * * /myscript.sh >>/var/adm/myscript.log 2>&1
раз в день
0 0 * * * /myscript.sh >>/var/adm/myscript.log 2>&1
Вам нужно что-то, что отслеживает директорию? incron может быть довольно удобным для этого:
1. Установите incron из репозитория
2. Включите incrond:
sudo systemctl enable incrond.service
sudo systemctl start incrond.service
3. Создайте соответствующий incrontab:
incrontab -e
и добавьте содержимое:
/path/to/watch IN_CREATE /path/to/mylogger.sh $@/$#
4. Создайте скрипт логирования:
cat <<EOF>> /path/to/mylogger.sh
#!/bin/bash
echo $1 >> /path/to/logfile
EOF
chmod +x /path/to/mylogger.sh
Вот и все.
Ответ или решение
Создание сценария для детектирования новых файлов в Unix (HP-UX 11i v2)
В данной статье мы рассмотрим, как создать сценарий для обнаружения новых файлов в заданной директории в среде HP-UX 11i v2, а также использование cron
для периодической проверки. Мы также обсудим возможные проблемы и их решение.
Шаг 1: Создание сценария
Вот пример простого сценария, который будет сравнивать файлы в директории и определять новые. С помощью этого сценария новые файлы будут фиксироваться и сохраняться в текстовый файл.
#!/usr/bin/sh
# Указываем переменные для хранения путей к предыдущему состоянию и новым файлам
previous=/tmp/previous
new=/tmp/newfiles
DIR=/path/to/watch
# Проверяем, существует ли файл с новыми
if [[ ! -s $new ]]; then
mv "$new" "$previous"
fi
# Проверяем, существует ли файл с предыдущими записями
if [[ ! -f "$previous" ]]; then
ls -rt "$DIR" > "$new"
exit
fi
# Получаем последний изменённый файл
ref=$(tail -1 "$previous")
# Пытаемся перейти в директорию
if ! cd "$DIR"; then
echo "Не удалось перейти в директорию $DIR"
exit 1
fi
# Ищем файлы, созданные после последнего обновления
ls -rt | while read file; do
if [[ "$file" -nt "$ref" ]]; then
echo "$file"
fi
done > "$new"
Описание сценария
- Переменные: Задаются пути к файлам для хранения данных о предыдущих и новых файлах.
- Проверка наличия файла: Если файл с новыми файлами не существует, старый файл перемещается в новое состояние.
- Получение последнего обновленного файла: Используется для сравнения времени создания новых файлов.
- Цикл обработки файлов: Для каждого файла в директории проверяется, был ли он создан после последнего обновления.
Шаг 2: Настройка cron
Для автоматического запуска сценария мы можем использовать cron
. Например, чтобы запускать сценарий каждые 5 минут:
*/5 * * * * /path/to/your/script.sh >> /var/adm/myscript.log 2>&1
Возможные проблемы
-
Множественные уведомления: Если вы получаете несколько уведомлений при создании нового файла, это может быть связано с тем, что ваш редактор (например,
vi
) создает временные файлы в процессе выполнения операций, которые триггерятIN_CREATE
несколько раз. -
Параллельное выполнение сценария: Чтобы избежать проблем с одновременным выполнением сценария, вы можете использовать блокировки или добавить задержку между запусками.
Заключение
Создание сценария для обнаружения новых файлов в HP-UX 11i v2 является эффективным способом автоматизации мониторинга директории. Использование встроенных средств, таких как cron
и sh
, позволяет легко настроить систему уведомлений. С помощью представленных рекомендаций вы сможете настроить надежный процесс для отслеживания изменений файлов в вашей системе.
SEO Оптимизация
- Ключевые слова: Unix, HP-UX 11i v2, скрипт, cron, детектирование файлов, автоматизация
- Фраза для поиска: "скрипт Unix для обнаружения новых файлов"
- Метатеги:
Для дополнительной информации и получения помощи, пожалуйста, оставляйте свои вопросы в комментариях.