🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

5603閲覧

raspberry piでcronを実行すると手打ちで実行したときと異なる動作が起きる

authink231

総合スコア2

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2020/12/19 04:15

編集2020/12/19 08:43

##やりたいこと

  • 非常に簡単でrasp piにおいて,crontabを使ってshファイルを実行させたい.

ファイルの内容は以下の通りで

bash

1#soundplay.sh 2mpg321 /home/user/soundfile.sh 3

これをcronで実行させています.mp3を再生するコマンドです.

###行った動作
0. $sudo crontab -eでcrontabの内容を変更

  1. */1 * * * * sh /home/user/soundfile.shと追記

問題なく1分ごとに実行されており,初期優先出力先であるHDMIをつなぐと,音もHDMI接続したディスプレイから再生されます.

困っていること

logを見ても問題なく実行されているようなのですが,raspiに接続したスピーカーから音がなりません.
ターミナルから 

bash

1sh soundplay.sh

で実行すれば音はなります.実行bashファイルや再生するmp3ファイルへのパスは通っているようです.

##原因?

  • 環境変数がcronを実行する際に読み込まれていない?

※追記:どうやらraspberry pi の優先出力先がUSBスピーカーになっていないことが原因のようです.

  • 優先出力先の設定

こちらを参考に/usr/share/alsa/alsa.conf内に設定を追記しました.

cronで実行している際にこのalsa.confが読まれていないことが原因のようなのですが...
##知りたいこと

  • cronでコマンドを実行する際と手打ちで実行する際とでは,参照される環境変数は違うのですか?
  • 違うとしたらどのファイルをどのように読ませれば(環境変数のパスを通せば?)良いのでしょうか?

環境

  • モデル:raspberry pi zeroW
  • ディストリビューション

bash

1$ lsb_release -a 2No LSB modules are available. 3Distributor ID: Raspbian 4Description: Raspbian GNU/Linux 10 (buster) 5Release: 10 6Codename: buster

何卒宜しくお願いします.

##追記
皆様のご助言を受け,いくつか検証を続けました.

以下の手順で検証したところ,やはりsudo とuserでデフォルトオーディオ設定が異なっているようでした.

  • 上述のcrontab の実行内容をspeaker-testに→HDMI経由でピンクノイズ(設定した出力先ではない)
  • sudo speaker-test→HDMI経由でピンクノイズ
  • speaker-test →USBスピーカー経由でピンクノイズ

更にGUIから設定を確認しようとraspi-configを開いたのですが,**
~~何故か'raspi-config: Advanced Options'内に'Audio'項目が見当たりません...**

sudo,userどちらもalsa.confの設定で優先出力先をUSBに指定していますし,Audio項がraspi-configから消えたことに関しては完全に原因不明でお手上げです....
思い切ってクリーンインストールするべきしょうか~~
audio設定は別項にありました.お恥ずかしい.

しかしそこでもUSBがデフォルトになっていました.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2020/12/19 04:34

raspberry piには詳しくないのですが、OSがLinuxだとしたらどうやってsoundplay.shをcronに登録したかによって、実行時の権限が変わってくると思います。実際に登録した手順やコマンドも含めて詳細を記載していただいた方が的確なアドバイスを受けやすいと思います。
authink231

2020/12/19 04:44

ご指摘ありがとうございます.修正いたします.
dodox86

2020/12/19 05:52

なぜ、sudoコマンドを使って crontab -e を実行するのですか? スーパーユーザーで実行する必要はないのではないですか?
authink231

2020/12/19 07:14

なるほど...cronがどういうものなのかをイマイチ理解しきれておらず,何も考えずにsudoしてしまっていました. /var/spool/cron内を確認したのですがuser名のディレクトリができていませんでした. sudoで crontab -eしてしまった結果,スーパーユーザーでcronが実行されてしまい,user固有の設定が反映されなかった...という可能性はありますか?
dodox86

2020/12/19 07:15

> スーパーユーザーでcronが実行されてしまい,user固有の設定が反映されなかった...という可能性はありますか? それを疑っています。
dodox86

2020/12/19 07:29

suでスーパーユーザーの権限で動こうとしているものの、環境はユーザー固有だったりしてヤヤコシイことになっている可能性はあります。オーナーがrootのままテンポラリファイルが作られてしまったり。通常のユーザーで実行できることであれば、crontab -e によるcronジョブの登録にsuを使う必要はありません。
authink231

2020/12/19 07:51

crontab -u username -e で再度設定をし直しました. しかし改善しないので別の原因なのではと考え始めました. スピーカー自体はHDM経由で音を出すことでも「解決」はできるのですが,原因が気になって仕方がないのでもう少し調べてみます.
guest

回答1

0

カレントディレクトリが変わりますし、実行ユーザも変わります。
そこらへんでそのスクリプトを見直してみては

投稿2020/12/19 06:37

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

authink231

2020/12/19 07:07

ありがとうございます.crontabsの所有者を確認してみました ``` username@raspberrypi:/var/spool/cron$ sudo ls -la crontabs 合計 12 drwx-wx--T 2 root crontab 4096 12月 19 12:41 . drwxr-xr-x 3 root root 4096 2月 14 2020 .. -rw------- 1 username crontab 1126 12月 19 12:41 username ``` rootから所有者が変わっているようです. 所有者を自分の環境構築しているアカウントにすれば解決されるのでしょうか.
y_waiwai

2020/12/19 07:11

というより、そのスクリプトを見直して、なんの原因で動作が変わるのか、しっかり調べてみては。 表面上だけつじつま合わせたところで、解決にはなりそうもないですが。
authink231

2020/12/19 07:22

ありがとうございます.スクリプト自体は非常に単純で「実行自体」はもされているようなのです. 問題は音声出力先の設定値(userレベルで設定)がcron実行時に反映されていないことにあるように思ったのでこのような質問担っています. 説明が足りずすみません...
y_waiwai

2020/12/19 07:27

その音声出力先の設定値がどうなってるか表示するようなスクリプトを書いてcronで実行させてみればどうでしょう。
authink231

2020/12/19 07:54

なるほど...全く思いつきませんでした. いくつか調べたのですが現在利用している(スクリプト実行時に利用している)出力先を確認する方法が見つかりません.もしご存知であればご教授いただけないでしょうか? aplayコマンドではそのようなオプションがなく...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問