Я использую Ubuntu 11.10.
Я написал скрипт, который синхронизирует каталог в ~
с каталогом в /dev/sda4
, используя Unison. Раньше у меня этот скрипт запускался каждые пять минут без проблем с использованием crontab. Сейчас я хочу выполнить этот скрипт только при запуске, перезапуске и завершении работы.
Вот как выглядит сценарий:
#!/bin/bash
unison -perms 0 -batch "/mnt/Data/Syncfolder/" "/home/myname/Syncfolder/"
Я бы хотел, чтобы сценарий запускался с такими механизмами, как Upstart, если это возможно. Так что я был бы счастлив с правильно настроенным файлом *.conf
в /etc/init
.
Спасибо заранее.
После большого поиска и выяснения здесь, мне удалось получить его работа:
Прежде, чем сделать следующее, удостоверьтесь, что Вы не используете unison-gtk
(Унисон GUI) также. У меня была ситуация в который unison
и unison-gtk
конфликтовавший. Удалить unison-gtk
через sudo apt-get remove unison-gtk
, и отключите старые файлы конфигурации Унисона путем переименования содержания папки: mv .unison .unison.old
При выполнении этого пора идти дальше.
Сначала я запустил скрипт как суперпользователь. Я сделал это, потому что Унисон должен быть выполнен однажды при создании нового сценария, для создания некоторых регистрирующихся файлов. Новомодные сценарии, вероятно, выполняются как корень, поэтому лучше делать это также, когда Вы запускаете скрипт впервые:
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
Перезапуск и Вы сделаны.
Я предлагаю вам забыть 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
Старый способ (с использованием /etc/init.d
и ссылок на него из /etc/rc?.d/[SK]*
) обрабатывается в /etc/init.d/rc
. Внимательно прочитайте этот сценарий и выясните, какое из его правил удерживает вас от исполнения. Хм, может быть, я хочу это повторить.
Имеет ли Upstart хуки для заданий SysV? имеет хороший ответ Upstart.
протестируйте ваш скрипт ... если он работает, вы можете сделать свой crontab следующим образом
@reboot sh /usr/local/bin/s4lj.bash
таким образом, он будет работать при запуске
info: http: //manpages.ubuntu.com/manpages/oneiric/en/man1/crontab.1.html http://www.softpanorama.org/Utilities/cron.shtml https: //en.wikipedia.org/wiki/Crontab