おじいさんの時計のように、cronを使用して正時にチャイムを鳴らすことはできますか?


8

askubuntuがQ&Aを読んだり、推奨されるコードスニペットを試したりすることに夢中になります。そのため、私はよく、正時にインターネットでテレビのニュースチャンネルを切り替えるのを逃しています。タイムシフトが可能なyoutubeチャンネルでは大きな問題ではありませんが、フラッシュプレーヤーを使用するテレビチャンネルの「ショーストッパー」です。

cron時計のチャイムのような祖父を鳴らすためのスクリプトを提供する(もちろん、微妙な音量で!)毎時0時にジョブを実行するように構成できますか?マイナーチャイムも時間の下部で鳴らすことができます。私は確かに、私は、適切な見つけることができるんです.ogg.oga、ネット上のファイルを、私は私が使用することができます知っているogg123それらを再生します。cronできるかどうか分からない。テスト時間までスリープおよびウェイクアップするスクリプトを使用できることはわかっていますが、常に何かを実行しているという考えは好きではありません(それについてはもう十分だと思います)。

これを行うことができる場合、cron誰かがそれを設定する方法に答えることができますか?

ありがとうございました。


私は英語のイディオムが苦手です。各時間の先頭は、各時間の開始を意味しますか?
heemayl 2016年

1
@heemayl LOLはい。私はデジタル時計が発明される前の時代から来ており、分単位の針があり、「上」が時:00を意味し、「下」が時:30を意味していました。Hehe
WinEunuuchs2Unix 2016年

- mcronインストールapt-getをsudoのstackoverflow.com/questions/44470965/...
SDsolar


@SDsolarこれcronは、質問の範囲を超えている代替品のようです。参考までに、私は以下の回答で祖父の時計のスクリプトを書きました。
WinEunuuchs2Unix 2017年

回答:


7

はい、できます。

cronテーブルを開きcrontab -e、以下を追加します。

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

/path/to/playerとを/path/to/file.ogg、必要なそれぞれの値に置き換えます。

上記では、毎秒00-th(最初の開始)分のサウンドを再生します(つまり、コマンドを実行します)。

301時間ごとの-th分にもコマンドを実行する場合:

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

入力crontab -eすると、ユーザーアカウント用に作成されたファイルはありません。で作成することを提案していますnano。私はこれを行い、提案されたコマンドを設定しました。^W(ファイルの書き込み)を選択すると、デフォルトのファイル名はになります/tmp/crontab.6QN0vo/crontab。ファイル名が間違っているようです。新しいcrontab -e構成ファイルを作成するための回答を更新できますか?私のシステムは既に/tmp/IG*正常に機能している1日以上経過したファイルを削除するように設定されていることに注意してください(子犬の設定方法を覚えていません)。
WinEunuuchs2Unix 2016年

@ WinEunuuchs2Unix心配しないで、cronそのファイルを一時的にで開きます。/tmpコンテンツを保存する/var/spool/cron/crontabs/<username>と、ファイルが作成/置換され、永続的なものになります。
heemayl 2016年

6

heemayl正午と正午cronに実行するための正しい答えを提供しました。再度、感謝します!ただし、他のユーザーが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

ほとんどのユーザーcronは、nanoエディターを使用するようにセットアップします。でこれらのコントロールキーを使用しnanoて、作業を保存します。

  • 上記の最後の2行を追加し、使用Ctrl+は、O書き込みにO UT(保存)ファイルを。
  • /tmp...ファイル名は、単にプレス、提示されていますが、心配することはありませんEnter
  • Ctrl+ Xを使用してエディターをXnanoます。

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、最小限の環境で実行されるためです。サードパーティのサウンドプレーヤーを使用する場合は、最初にこの行を省略してください。その後、音が出ない場合はラインを元に戻します。それでも音が出ない場合は、まあ幸せ狩り!

私がネットで見ている2つの主要なテレビニュース番組は、通常よりも音量が小さいため、テレビを通常よりも上げています。その結果、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.