我正在运行 64 位 Debian 6。
我想要做的是在启动时运行 Unison,以持续监视我在 VM 上运行的 LAMP 服务器上的文件并将其与 VM 共享文件夹同步。
while true
do
unison -batch -owner -group /folder1/ /folder2/
sleep 10
done
现在,我可以让这个脚本在启动时运行……但问题是它会挂起。即使我使用 nohup,它也会挂在 nohup 对话框中。
另外,如果有办法使用 nohup,我真的宁愿它根本不记录任何内容。但是,我在 nohup 或 unison 文档中都找不到此选项。我可能忽略了它,但我找不到它。
我确信有一种方法可以将 Apache 链接到另一个文件夹并使用它...但我仍然想知道如何做到这一点,因为我也可以在不同的环境中使用它。
谢谢
答案1
为什么不首先将 Apache 指向虚拟机上的共享文件夹?这就像为您的虚拟主机添加/更改一个文件一样简单(我相信您已经这样做了)。这将使您不必在更新服务器文档根目录时等待 5-10 秒。
然而您实际要求的是定期运行某些命令,因此最后您只需要一个 cron 作业。这个答案可能对你有帮助。
因此您只需将其添加到您的 crontab 文件中:
* * * * * unison -batch -owner -group /folder1/ /folder2/ >/dev/null 2>&1
* * * * * sleep 10; unison -batch -owner -group /folder1/ /folder2/ >/dev/null 2>&1
* * * * * sleep 20; unison -batch -owner -group /folder1/ /folder2/ >/dev/null 2>&1
* * * * * sleep 30; unison -batch -owner -group /folder1/ /folder2/ >/dev/null 2>&1
* * * * * sleep 40; unison -batch -owner -group /folder1/ /folder2/ >/dev/null 2>&1
* * * * * sleep 50; unison -batch -owner -group /folder1/ /folder2/ >/dev/null 2>&1
>/dev/null 2>&1
重定向 stdout 和 stderr 输出的方法,即删除所有日志记录。
答案2
有一个内置-repeat
标志,您可以指定两次执行之间应等待的秒数unison
。请参阅手动的。
unison -repeat 10 -batch -owner -group /folder1/ /folder2/
答案3
vi /etc/sysconfig/unison.env
添加export HOME=/path/to/home
(例如export HOME=/home/user1
:)
vi /etc/init.d/unison
添加以下几行:
#!/bin/bash
# chkconfig: 2345 20 80
# description: unison service
# add this line to avoid `Fatal error: exception Util.Fatal("Environment variable HOME not found")`
. /etc/sysconfig/unison.env
case $1 in
start)
unison -batch -owner -group /folder1/ /folder2/ &
;;
stop)
ps aux | grep -v grep | grep unison | awk '{print $2}' | xargs kill -9
;;
*)
echo "Usage: service unison {start|stop}"
;;
esac
配置启动
chkconfig unison on