x〜y時間の間だけプロセスを実行することを許可する

x〜y時間の間だけプロセスを実行することを許可する

モバイルデータ接続サービスを使用しています。午前9時から午後4時までは無制限の帯域幅を使用できます。

プログラム外でDropboxアプレットなどのアプリケーションを「ミュート」する方法を知りたいです。

Dropboxバイナリを次のスクリプトに置き換えることを検討しました。

#!/bin/bash
H=`date +"%H"`
if (($H >= 9 && $H < 16))
then
    echo "run dropbox here"
fi

誰もがより良いアイデアを持っているかどうか疑問に思います。つまり、私のソリューションでは、Dropboxは午後4時以降も実行を続け、午前9時前にコンピュータの電源を入れても起動しません。 Wi-Fiを使用する場合、制限が課されない場合は素晴らしいです。

誰にも解決策があるかどうか疑問に思います。システムまたは予約されたことまたはそのようなもの。私はこれらのツールが非常に強力であることを知っていましたが、他のものはまったく知りませんでした。

(私のシステム:XUbuntu 15.04、つまりxfce4とsystemd)

答え1

cronデーモンプロセスを開始および終了するために使用されます。 dropboxはユーザーとして実行されるため、cronjobをuser:として編集し、crontab -eエディタに次のように入力します。

0 9 * * * $HOME/bin/dropbox-daemon-path
59 16 * * * pkill -u "$LOGNAME" dropbox-daemon-process-name

午前9時にDropboxデーモンを起動し(ここにフルパスを提供する必要があります)、午後5時1分前にそのユーザーのDropboxデーモンを終了します。

誰かの答えを聞きたいですsystemd

編集:Gilesが指摘したように、システムが次の場合は役に立ちません。電源が入っている9時から17時まで。繰り返しsystemdますが、このcronjobアプローチは最適ではありませんが。

#!/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

私にとってはきれいではありません。スクリプトは1分ごとにcronによって実行され、数行のログを残します。しかし、効果的でなければなりません。

答え2

@Janisが述べたように、特定の時間に実行されるようにタスクを設定すると、cron次の項目の形式を取ることができます。

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

2番目の部分は、ネットワーク構成が変更されたときに実行するのと同じスクリプトをリンクすることです。

/etc/NetworkManager/dispatcher.d/dropbox-check

#!/bin/sh
exec /usr/local/bin/maybe-stop dropbox

答え3

1つのオプションは、cron9時にcronjobを設定し、16時に別のオプションを設定することです。ロゴファイルどこかに。ラッパーが存在することを確認します。ロゴファイルアプリケーションを起動するかどうかを決定します。

アプリケーションが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

関連情報