upstart bittorrent sync btsync 的两个配置

upstart bittorrent sync btsync 的两个配置

我想为 BitTorrent Sync 编写一个 upstart 脚本,在早上以“btsync --config day.conf”启动 btsync,晚上以“btsync --config night.conf”重新启动它。这样,我就可以在“day.conf”文件中限制上传速率,并删除“night.conf”文件中的任何限制。我想使用 cron 然后使用正确的配置文件启动 btsync。

我目前在 /etc/init/btsync.conf 中有

setuid patrick
setgid patrick

start on runlevel [2345]
stop on runlevel [016]

expect fork

instance $CONF

chdir /home/patrick/programs/btsync

exec ./btsync --config $CONF

然后我可以使用以下命令启动 btsync:

sudo initctl start btsync CONF=btsync-day.conf

我可以将其放入 /etc/crontab 中,这样它就可以工作了。但我认为使用实例节并不是正确的做法,因为我实际上并没有运行实例。Btsync 不能运行多个实例。此外,要停止作业,我必须使用正确的 CONF= 变量来停止它,但我宁愿能够停止它而不需要指定正确的实例。

在 upstart 中有没有更好的方法来实现这个功能?

答案1

我认为最好的方法是使用一个脚本来管理 btsync 应用程序。该脚本将监视时间并相应地重新启动 btsync 应用程序。

该脚本看起来应如下所示(未经测试):

/bin/bash #!/bin/bash

SUNRISE="06:00"
SUNSET="19:00"

RUNDIR=`basename "$0"`
PIDFILE="${RUNDIR}/.sync/sync.pid"
CONFWFILE="${RUNDIR}/.btsync_safe.confw"
CONFDAY="${RUNDIR}/btday.conf"
CONFNIGHT="${RUNDIR}/btnight.conf"

function start_bt
{
   start-stop-daemon --chdir "$RUNDIR" --pidfile "$PIDFILE" --start --exec ./btsync -- -c $1
   echo "$1" > "$CONFWFILE"
}

function stop_bt
{
   start-stop-daemon --pidfile "$PIDFILE" --stop
}

function which_conf
{
   curtime=`date +%H:%M`
   [ $curtime > "$SUNRISE"  && $curtime < "$SUNSET" ] && echo "$CONFDAY" || echo "$CONFNIGHT"
}

trap "stop_bt" EXIT

chdir $RUNDIR
for ((;;))
do
   sleep 60
   [ `cat "$CONFWFILE"` == `which_conf` ]  || stop_bt
   kill -0 `$PIDFILE` || start_bt `which_conf`
done

相关内容