我正在使用 Ubuntu 11.10。
我编写了一个脚本,使用 Unison 将 中的目录~
与 上的目录同步/dev/sda4
。以前,我使用 crontab 每五分钟运行一次这个脚本,没有任何问题。现在,我只想在启动、重启和关机时执行这个脚本。
脚本如下:
#!/bin/bash
unison -perms 0 -batch "/mnt/Data/Syncfolder/" "/home/myname/Syncfolder/"
如果可能的话,我希望脚本能够使用 Upstart 之类的机制运行。因此,我最高兴的是有一个正确配置的*.conf
文件/etc/init
。
提前致谢。
答案1
我建议你尽可能忘记 SysV,使用新风格的脚本。类似这样的脚本(例如/etc/init
输入):/etc/init/unison.conf
start on (runlevel [06] or local-filesystems)
task
# If it needs to run other than root (you need Upstart 1.4, otherwise use "su" on exec line
setuid <username>
script
# You can place your entire script here, no need for separate script
exec unison -perms 0 -batch "/mnt/Data/Syncfolder/" "/home/myname/Syncfolder/"
end script
答案2
经过大量的搜索和询问后,我设法让它工作起来:
在执行以下操作之前,请确保您没有使用(Unison GUI)。我遇到过和冲突的unison-gtk
情况。删除via ,并通过重命名包含文件夹来禁用 Unison 的旧配置文件:unison
unison-gtk
unison-gtk
sudo apt-get remove unison-gtk
mv .unison .unison.old
当你做到了这一点之后,就该继续前进了。
首先,我以超级用户身份运行该脚本。我这样做是因为当您创建新脚本时,需要运行一次 Unison 来生成一些日志文件。Upstart 脚本可能以 root 身份运行,因此最好在第一次运行该脚本时也这样做:
sudo su
unison -perms 0 -batch "/home/MyName/Syncfolder" "/mnt/Data/Syncfolder" >> /var/log/unison.log
exit
然后,我运行:sudo gedit /etc/init/unison.conf
。我粘贴了以下内容,并保存了文件:
description "My File Sync"
author "My Name"
env HOME=/home/MyName
start on runlevel [0123456]
pre-start script
echo "Starts syncscript"
end script
post-stop script
echo "Ends syncscript"
end script
exec unison -perms 0 -batch "/home/MyName/Syncfolder" "/mnt/Data/Syncfolder" >> /var/log/unison.log
重新启动就完成了。
答案3
测试你的脚本...如果它有效,你可以像这样执行你的 crontab
@reboot sh /usr/local/bin/s4lj.bash
这样它就可以在启动时工作
信息: http://manpages.ubuntu.com/manpages/oneiric/en/man1/crontab.1.html http://www.softpanorama.org/Utilities/cron.shtml https://en.wikipedia.org/wiki/Crontab
答案4
旧方法(使用/etc/init.d
,并从 链接到它/etc/rc?.d/[SK]*
)由 处理/etc/init.d/rc
。仔细阅读该脚本,找出其中的哪一条规则阻止您被执行。嗯,也许我想重申一下。
Upstart 是否为 SysV 作业发出钩子?有一个很好的 Upstart 答案。