每60秒bash复制一个文件

时间:2014-02-05 08:40:03

标签: linux bash loops cp

我有一个thecus nas服务器,他们似乎对他们的模板做一些棘手的事情来显示他们的文件,目前正在启动我正在运行一个shell命令将一个文件复制到另一个文件上,以便它用我的自定义启动模板,但是经过一段时间后(我不确定这个时间是什么)它会再次用原始文件覆盖它,我的自定义模板就不见了。

这是我当前的启动脚本:

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

有没有办法,执行该复制命令,比如每60秒一次? login.tpl文件只有2kb,所以我不认为这会导致任何问题。

这样做有什么不妥吗?或者我可以使用另一种技巧吗?

4 个答案:

答案 0 :(得分:7)

回答一般性问题,有两种方法可以做到这一点,把它放在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

这将在每周的每个月的每个月的每一小时的每一分钟运行命令。 (每60秒一次)

但是,作为Aaron Digulla said,最好到达它从中拉出配置并在那里编辑它的位置,而不是每隔60秒覆盖一次。

答案 1 :(得分:2)

更好的解决方案是找出NAS从中获取原始文件的位置。

执行此命令以查找可能的候选人:

find / -name "login.tpl"

您还可以使用模式:"*login*"

我建议在使用模式时使用引号,否则它可能与本地文件夹中的文件匹配,然后shell会在将参数传递给find之前替换名称​​。

要找出更改文件的人,请使用auditctlsee this question)。

答案 2 :(得分:0)

尝试以下解决方案:

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

答案 3 :(得分:0)

如果你正在寻找一次性的,一次性的解决方案,你可以使用手表实用程序

watch -n 60 ./test.sh

每60秒运行一次./test.sh并将输出回显到stdout