cron을 사용하여 할아버지 시계처럼 시간의 상단에 차임을 할 수 있습니까?


8

askubuntu에서 Q & A를 읽고 권장 코드 스 니펫을 실험하면서 길을 잃었습니다. 그래서 나는 종종 인터넷상에서 TV 뉴스 채널을 전환하는 것을 놓치고 있습니다. 시간 이동을 허용하는 YouTube 채널에는 큰 문제가 아니지만 플래시 플레이어를 사용하는 TV 채널에는 "쇼 스토퍼"입니다.

cron매 시간마다 작업을 실행하여 시계 차임과 같은 할아버지에게 소리를주는 스크립트를 제공 할 수 있습니까 (물론 미묘한 음량으로)! 시간의 맨 아래에도 작은 차임 소리가 들릴 수 있습니다. 인터넷에서 적합한 파일 .ogg이나 .oga파일을 찾을 수 있다고 확신 ogg123하며 재생할 때 사용할 수 있다는 것을 알고 있습니다. 나는 그것을 할 cron수 있는지 모른다 . 나는 테스트 시간까지 잠들고 깨어나는 스크립트를 사용할 수 있지만 항상 무언가를 실행한다는 생각을 좋아하지는 않는다는 것을 알고 있습니다 (이미 생각하는 것만으로 충분합니다).

이것이 가능하다면 cron누군가가 그것을 설정하는 방법에 대답 할 수 있습니까?

감사합니다.


나는 영어 관용구를 잘하지 않습니다. 각 시간의 상단은 각 시간의 시작을 의미합니까?
heemayl

1
@heemayl LOL 예. 나는 디지털 시계가 발명되기 전의 시간에서 왔으며 "최상위"에 시간 : 00시, "하위"에 시간 : 30 시라는 분침이있었습니다. Hehe
WinEunuuchs2Unix

apt-get을 mcron를 설치 sudo는 - stackoverflow.com/questions/44470965/...
SDsolar


@ SDsolar 이것은 cron질문의 범위를 벗어난 대체품 인 것으로 보입니다 . 참고로 아래 답변에 할아버지 시계 스크립트를 작성했습니다.
WinEunuuchs2Unix

답변:


7

그래 넌 할수있어.

cron테이블을 열고 다음을 crontab -e추가하십시오.

00 * * * * /path/to/player /path/to/file.ogg

교체 /path/to/player하고, /path/to/file.ogg각각의 값으로 당신이 원하는.

위의 내용은 매 시간마다 00-th (첫 시작) 분에 사운드를 재생합니다 (예 : 명령 실행) .

30각 시간의-분에도 명령을 실행하려면 다음을 수행하십시오 .

00,30 * * * * /path/to/player /path/to/file.ogg

입력 crontab -e하면 내 사용자 계정에 대해 작성된 파일이 없다고 표시됩니다. 로 하나를 만들 수 있습니다 nano. 나는 이것을하고 제안 된 명령을 설정했다. ^W(파일 쓰기)를 선택할 때 기본 파일 이름은 다음과 같습니다 /tmp/crontab.6QN0vo/crontab. 파일 이름이 매우 잘못되었습니다. 새 crontab -e구성 파일 을 만들기 위해 답변을 업데이트 할 수 있습니까 ? 내 시스템은 이미 /tmp/IG*잘 작동했던 하루 이상의 파일 을 삭제하도록 설정되어 있습니다 (그 강아지를 어떻게 설정했는지 기억하지 못합니다).
WinEunuuchs2Unix

@ WinEunuuchs2Unix 걱정하지 마십시오 . 일단 cron파일 /tmp을 저장하면 내용을 저장하고 파일을 생성 / 교체하며 /var/spool/cron/crontabs/<username>영구적입니다.
heemayl

6

heemaylcron시간의 맨 위와 시간의 맨 아래에서 실행되도록 정답을 제공했습니다 . 다시 감사합니다! 그러나 다른 사용자는 cronjob기본적으로 사운드 파일을 재생할 수 없음 을 발견했습니다 .


cron소리를 재생하도록 구성

위해에 대한 cron이 필요 사운드 파일 재생 export환경 변수를 :

export XDG_RUNTIME_DIR="/run/user/1000"

이 작업이 끝나면 스크립트 사운드가 재생됩니다.

다른 답변으로 지적 하여 사용자 ID는 항상하지 않을 수 있습니다 1000. 사용자 ID를 찾으려면 다음을 사용하십시오.

$ id

uid=1000(rick) gid=1000(rick) groups=1000(rick),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)

사용자 ID가 1000이 아닌 경우 스크립트를 ID로 변경하십시오.

cron시간의 상단과 시간의 하단을 실행하도록 구성

crontab -e 설정 (마지막 5 줄만) :

# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
00 *    *   *   *    /usr/local/bin/top-of-hour-chime    >/dev/null
00,30 * *   *   *    /usr/local/bin/bottom-of-hour-chime >/dev/null

대부분의 사용자 cronnano편집기 를 사용하도록 설정 합니다 . 다음 제어 키 nano를 사용하여 작업을 저장하십시오.

  • 위의 마지막 두 줄을 추가하고 사용 Ctrl+는 O쓰기 O 유타 (저장) 파일을.
  • /tmp...파일 이름이 제시되어 있지만, 단순히 눌러 걱정하지 않습니다 Enter.
  • 이제 Ctrl+ X를 사용 하여 편집기를 X로nano 만드십시오.

bottom-of-hour-chime이 짧고 달콤한 이후 OK입니다 너무 시간의 상단하지만,에서 스크립트가 실행됩니다.

>/dev/null줄 끝에 가 없으면 cron명령 출력으로 이메일을 보내려고합니다. 메일 서버 설정이 없으면 /var/log/syslog파일 에 오류 메시지가 나타납니다 .

Oct 02 10:00:07 dell CRON[21259]: (CRON) info (No MTA installed, discarding output)

cron팝업 알림을 표시하도록 구성

스크립트는 매시간 상단에 팝업 알림 메시지를 표시합니다. 이를 위해 추가 변수를 내 보내야합니다.

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";

내용 top-of-hour-chime

#! /bin/bash

# NAME: top-of-hour-chime
# PATH: /usr/local/bin
# DESC: Play sound called by cron
# CALL: Automatically called by /var/spool/cron/crontabs/<user_name>
# DATE: Created Oct 1, 2016. Modified June 10, 2018.
# UPDT: 2016-11-09 - Add notification bubble with time in text.
#       2018-06-10 - Switch from `ogg123` to `paplay` in default installation.

# exit # uncomment to suppress when watching movies

# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"

# needed for notify-send
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";

# get hour in 12 hour format
HOUR=$(date +%I)
ZHOUR=$(echo $HOUR | sed 's/^0*//')

pactl set-sink-volume 0 -25%
DISPLAY=:0 notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "It is ""$ZHOUR"" o'clock"
paplay '/usr/share/sounds/ubuntu/ringtones/Melody piano.ogg'
pactl set-sink-volume 0 +25%

export XDG_RUNTIME_DIR...플레이 사운드를 얻을 필요가있다. cron최소한의 환경에서 실행 되기 때문 입니다. 타사 사운드 플레이어를 사용하는 경우이 줄을 먼저 생략해야합니다. 그런 다음 소리가 들리지 않으면 회선을 다시 넣으십시오. 그래도 소리가 나지 않으면 행복하게 사냥!

인터넷을 통해 시청하는 두 가지 주요 TV 뉴스는 평소보다 볼륨이 부드럽기 때문에 TV를 평소보다 높게 설정했습니다. 결과적으로 ogg123사운드 파일을 재생할 때 매우 큰 소리가납니다. 그래서 pactl차임 전에 볼륨을 줄이고 나중에 그것을 증가하는 데 사용됩니다.

시간별 차임의 내용

이것은 거의 복제본 일 top-of-hour-chime수도 있고 중복 될 수도 있지만 완전한 문서화 목적으로 포함되어 있습니다.

#! /bin/bash

# NAME: bottom-of-hour-chime
# PATH: /usr/local/bin
# DESC: Play sound called by cron
# CALL: Automatically called by /var/spool/cron/crontabs/<user_name>
# DATE: Oct 1, 2016. Modified June 10, 2018.

# UPDT: 2018-06-10 Switch from `ogg123` to `paplay` installed by default.

# exit # Uncomment to suppress when watching movies.

# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"

pactl set-sink-volume 0 -25%
paplay /usr/share/sounds/ubuntu/ringtones/Bliss.ogg
pactl set-sink-volume 0 +25%

1

이 내보내기를 사용 함에도 불구하고 :

# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"

작동하지 않았다.

몇 달 간의 연구 끝에 해결책이 없었습니다.

필사적으로 다음을 시도해 보았습니다.

contab에 다음을 입력하십시오

# Terminal command: crontab -e
# Detect the name of the display in use
display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
user=$(who | grep '('$display')' | awk '{print $1}') # the user of the display 
uid=$(id -u $user) #Detect the id of the user

XDG_RUNTIME_DIR=/run/user/${uid}

*/5 * * * * sh /root/.play_sound.sh

다음 만들기 .play_sound.sh

/root/.play_sound.sh

display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
user=$(who | grep '('$display')' | awk '{print $1}') # the user of the display 
uid=$(id -u $user) #Detect the id of the user

su - $user -c "paplay /usr/share/sounds/freedesktop/stereo/complete.oga"

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.