我想为 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