Как я могу запустить этот скрипт при запуске, перезагрузке и завершении работы?

Я использую Ubuntu 11.10.

Я написал скрипт, который синхронизирует каталог в ~ с каталогом в /dev/sda4, используя Unison. Раньше у меня этот скрипт запускался каждые пять минут без проблем с использованием crontab. Сейчас я хочу выполнить этот скрипт только при запуске, перезапуске и завершении работы.

Вот как выглядит сценарий:

#!/bin/bash
unison -perms 0 -batch "/mnt/Data/Syncfolder/" "/home/myname/Syncfolder/"

Я бы хотел, чтобы сценарий запускался с такими механизмами, как Upstart, если это возможно. Так что я был бы счастлив с правильно настроенным файлом *.conf в /etc/init.

Спасибо заранее.

1
задан 5 April 2012 в 15:38

4 ответа

После большого поиска и выяснения здесь, мне удалось получить его работа:

Прежде, чем сделать следующее, удостоверьтесь, что Вы не используете 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

Перезапуск и Вы сделаны.

1
ответ дан 5 April 2012 в 15:38

Я предлагаю вам забыть 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
0
ответ дан 5 April 2012 в 15:38

Старый способ (с использованием /etc/init.d и ссылок на него из /etc/rc?.d/[SK]*) обрабатывается в /etc/init.d/rc. Внимательно прочитайте этот сценарий и выясните, какое из его правил удерживает вас от исполнения. Хм, может быть, я хочу это повторить.

Имеет ли Upstart хуки для заданий SysV? имеет хороший ответ Upstart.

0
ответ дан 5 April 2012 в 15:38

протестируйте ваш скрипт ... если он работает, вы можете сделать свой 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

0
ответ дан 5 April 2012 в 15:38

Другие вопросы по тегам:

Похожие вопросы: