如何在启动、重启和关闭时运行该脚本?

如何在启动、重启和关闭时运行该脚本?

我正在使用 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 的旧配置文件:unisonunison-gtkunison-gtksudo apt-get remove unison-gtkmv .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 答案。

相关内容