Копирование файла каждые 60 секунд bash



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



Вот мой текущий загрузочный скрипт:



#!/bin/bash
cp /customTemplates/login.tpl /www/img/templates/adm/login.tpl


Есть ли способ выполнить эту команду копирования, скажем каждые 60 секунд? вход.файл tpl имеет размер всего 2 КБ, поэтому я не думаю, что это может вызвать какие-либо проблемы.



Есть ли что-то неправильное в том, чтобы делать это, таким образом? Или есть другой трюк, который я мог бы использовать?
641   4  

4 ответов:

Чтобы ответить на общий вопрос, есть два способа сделать это: поместить его в цикл while/sleep или использовать crontab

1) while / sleep

#!/bin/bash
while true; do
  cp -f /customTemplates/login.tpl /www/img/templates/adm/login.tpl
  sleep 60
done

2) crontab (предпочтительно)

Запустите crontab -e и поместите туда следующую строку

* * * * * cp -f /customTemplates/login.tpl /www/img/templates/adm/login.tpl
Это будет выполнять команду каждую минуту каждого часа каждого дня каждого месяца каждого дня недели. (ergo каждые 60 секунд)

Но, как сказал Аарон Дигулла было бы лучше добраться до того места, где он тянет конфигурируйте и редактируйте его там, а не перезаписывайте каждые 60 секунд.

Лучшим решением было бы выяснить, откуда NAS берет исходный файл.

Выполните эту команду, чтобы найти возможных кандидатов:

find / -name "login.tpl"

Вы также можете использовать шаблоны: "*login*"

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

Чтобы узнать, кто изменяет файл, используйте auditctl (видишь это вопрос ).

Попробуйте следующее решение:

chmod +x /tmp/test.sh

Ваш сценарий test.sh:

#!/bin/bash
cp -f /customTemplates/login.tpl /www/img/templates/adm/login.tpl

Тогда сделайте:

touch /tmp/cronjob
echo "* * * * * ./test.sh" > /tmp/cronjob
/etc/init.d/crond/start
crontab /tmp/cronjob

Если вы ищете одноразовое решение, вы можете использовать утилиту watch

watch -n 60 ./test.sh

Бежит ./test.sh каждые 60 секунд и повторяет вывод в stdout

Comments

    Ничего не найдено.