我使用移动数据连接服务。我只在上午 9 点到下午 4 点之间拥有不受限制的带宽。
我想知道如何在该计划之外“静音”诸如 Dropbox 小程序之类的应用程序。
我考虑过用这个脚本替换 Dropbox 二进制文件:
#!/bin/bash
H=`date +"%H"`
if (($H >= 9 && $H < 16))
then
echo "run dropbox here"
fi
我想知道是否有人有更好的主意。也就是说,在我的解决方案中,Dropbox 将在下午 4 点之后继续运行,并且如果计算机在上午 9 点之前通电,则将无法启动。如果使用 wifi 时不施加任何限制,那就太酷了。
我想知道是否有人有任何解决方案系统或者计划任务或一些这样的。我知道这些工具非常强大,但除此之外我一无所知。
(我的系统:XUbuntu 15.04,即xfce4和systemd)
答案1
用于cron
启动守护进程并终止它。由于 dropbox 以用户身份运行,因此请以用户身份编辑 cronjob:crontab -e
并在编辑器中放置:
0 9 * * * $HOME/bin/dropbox-daemon-path
59 16 * * * pkill -u "$LOGNAME" dropbox-daemon-process-name
上午 9 点,它启动 Dropbox 守护进程(您应该在此处提供完整路径),并在下午 5 点之前 1 分钟,它终止它(对于该用户)。
我很想听听有人给出systemd
答案。
编辑:正如吉尔斯指出的,如果系统是这样的话,这将没有帮助已通电9 到 17 之间。同样,这种 cronjob 方法不是最优的,但我不知道如何将 dropbox 与systemd
.话虽如此,我们在包装脚本中尝试您原来的方法,如果时间超出您的界限,该脚本就会退出:
#!/bin/bash
hour=$(date +%H)
[ $hour -lt 09 -o $hour -gt 16 ] && exit
#else
exec path-to-dropbox-daemon
稍微修改一下crontab
* 9-16 * * * $HOME/bin/dropbox-wrapper-script
59 16 * * * sleep 50; pkill -u "$LOGNAME" dropbox-daemon-process-name
对我来说,这并不漂亮。每分钟你的脚本都会被 cron 执行,留下几行日志。但应该是有效的。
答案2
设置cron
作业在特定时间运行;正如@Janis 提到的,这可能采用以下条目的形式:
0 9 * * * bin chmod +x /usr/bin/dropbox
0-59/10 * * * * root /usr/local/bin/maybe-stop dropbox
修改:正如我最初编写的那样,每 10 分钟运行一次是疯狂的矫枉过正,因为只有超级用户才能将其更改回+x
,所以更好的想法可能是:
0 9 * * * bin chmod +x /usr/bin/dropbox
0 16 * * * root /usr/local/bin/maybe-stop dropbox
哪里/usr/local/bin/maybe-stop
:
#!/bin/bash
RESTRICT_PROGRAM=$1
WIFI_DEVICE=wlo1
BEGIN_FREE=9
END_FREE=16
if [ $(date +%H) -ge $BEGIN_FREE -a $(date +%H) -lt $END_FREE ]
then
# We have free broadband: allow it.
chmod +x /usr/bin/$RESTRICT_PROGRAM
elif ip addr show dev $WIFI_DEVICE | grep ' inet' | grep -q global
then
# We have WiFi: allow it.
chmod +x /usr/bin/$RESTRICT_PROGRAM
elif
else
chmod -x /usr/bin/$RESTRICT_PROGRAM
if [ $(date +%H) -lt $BEGIN_FREE -o $(date +%H) -ge $END_FREE ]
then
PIDS=$(fuser /usr/bin/$RESTRICT_PROGRAM 2>/dev/null | cut -d: -f2)
kill -SIGTERM $PIDS
sleep 3
kill -SIGKILL $PIDS
fi
fi
第二部分是链接相同的脚本以在网络配置更改时运行:
/etc/NetworkManager/dispatcher.d/dropbox-check
#!/bin/sh
exec /usr/local/bin/maybe-stop dropbox
答案3
一种选择cron
是在 9:00 设置一个 cronjob,在 16:00 设置一个 cronjob,创建(或删除)一个标志文件在某个地方。包装器会检查它是否存在标志文件以确定是否启动应用程序。
如果您的应用程序在 16:00 之前启动并且在 16:00 之后仍然运行,那么您当然可以 - 假设您事先不知道运行持续多长时间 - 终止该应用程序(例如由 cronjob 启动)。
答案4
timeStart=`date --date='8AM' +"%s"`
timeStop=`date --date='23:59:00' +"%s"`
now=`date +"%s"`
if (($now >= $timeStart && $now < $timeStop))
then
#CRON JOBS BETWEEN 8AM AND 12PM
echo "NO BEER"
else
#CRON JOBS OUTSIDE OF 8AM AND 12PM
echo "DRINK BEER"
fi