Копирование файла каждые 60 секунд bash
У меня есть сервер Thecus nas, и они, похоже, делают некоторые хитрые вещи со своими шаблонами для отображения своих файлов, в настоящее время при загрузке я запускаю команду оболочки, чтобы скопировать один файл поверх другого, так что он загружается с моим пользовательским шаблоном, однако через некоторое время (я не уверен, что это время) он перезаписывает его снова с оригиналом, и мой пользовательский шаблон исчез.
Вот мой текущий загрузочный скрипт:
#!/bin/bash
cp /customTemplates/login.tpl /www/img/templates/adm/login.tpl
Есть ли способ выполнить эту команду копирования, скажем каждые 60 секунд? вход.файл tpl имеет размер всего 2 КБ, поэтому я не думаю, что это может вызвать какие-либо проблемы.
Есть ли что-то неправильное в том, чтобы делать это, таким образом? Или есть другой трюк, который я мог бы использовать?
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 done2) crontab (предпочтительно)
Запустите
crontab -eи поместите туда следующую строкуЭто будет выполнять команду каждую минуту каждого часа каждого дня каждого месяца каждого дня недели. (ergo каждые 60 секунд)* * * * * cp -f /customTemplates/login.tpl /www/img/templates/adm/login.tplНо, как сказал Аарон Дигулла было бы лучше добраться до того места, где он тянет конфигурируйте и редактируйте его там, а не перезаписывайте каждые 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