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

두 번째 부분은 네트워크 구성이 변경될 때 실행할 동일한 스크립트를 연결하는 것입니다.

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

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

답변3

한 가지 옵션은 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

관련 정보