お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2016-03-30 13:26:08

cingyan
メンバ
登録日: 2013-09-12

cronを使えない

古いパソコンで、ストリーミングラジオのラジコや、NHKのらじるらじるをタイマーで録音したいのです。
端末から.shのシェルスクリプトというのだと思いますが、それを実行すると録音出来ました。

次にタイマーですが、crontabというのかcronというのか分かりませんがそれを使うのは、分かったのですが、
使い方を把握していないのか、何か問題があるのか、ほとんど録音できません。
シェルスクリプトをタイマーで実行すると、xmlファイルが作成されて、録音したmp3ファイルは作成されません。

試しに、cronに

コード:

2 * * * * echo "test cron"

としても、test cronと表示されません。

そもそも、cronの実行方法も把握していません。
端末で、crontabと打ってEnterを押すと、入力待ちの状態でなく、何も表示されない何か実行しているような状態になります。

crontabと打つ必要がないのでしょうか、pc起動時にすでにスケジュールとして実行しているのかも分かりません。

コード:

service crond status

をすると、実行しているらいいのですが、

echoができません。
もちろん、ラジコ録音のスクリプトも実行されません。
cronをどうやって使うのでしょうか。教えてくだい。

オフライン

 

#2 2016-03-30 15:15:18

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

OSはubuntuを入れてから、Lubuntuを入れて使っています。
Ubuntu 15.04

オフライン

 

#3 2016-03-30 23:10:59

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: cronを使えない

cingyan さん

1つのサイトだけでなく、複数のサイトで cron について勉強されることをおすすめします。
特定のサイトで間違っていることがあるので。


cingyan による投稿:

そもそも、cronの実行方法も把握していません。
端末で、crontabと打ってEnterを押すと、入力待ちの状態でなく、何も表示されない何か実行しているような状態になります。

入力待ちと何かを実行している状態との違いは何でしょうか?おそらく入力待ち状態だと思いますが。
crontab は -e オプションを付けることで編集モードになります。
何も付けない状態だと、標準入力 (crontab 実行後に cron の内容を入力する) から
cron を設定することになります。


echo の件については、cron で出力されたメッセージは、
Ubuntu の場合 /var/log/syslog に出力されるようです。
(他のディストリビューションでは、/var/log/cron)
なので、/var/log/syslog に "test cron" がないでしょうか?
指定の「2 * * * *」については、毎時間の2分に実行されますので、
その後に確認してみてください。

オフライン

 

#4 2016-04-12 12:17:55

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

hellfire様、御回答ありがとうございました。

echoについては、参考になりました。

http://tech.matchy.net/archives/152
こちらのページを参考に、ラジコの録音で、

ターミナルで

コード:

./rec_radiko.sh チャンネル 録音時間(分) 保存先ディレクトリ  ファイル名

このように入力しても、録音できず、

コード:

bash ./rec_radiko.sh チャンネル 録音時間(分) 保存先ディレクトリ  ファイル名

このようにbashをつけるとできるのです。

https://gist.github.com/j3tm0t0/4034720
こちらのページを参考にして、
crontabu -e で、

コード:

# m h  dom mon dow   command
45 11 12 4 * sh ~/rec_radiko.sh FMTOYAMA 1 ~/test1

このように設定しても、録音できません。
cronの設定を把握していないのが原因だと思います。
何をどうすれば、録音できるのか、お教えてください。

オフライン

 

#5 2016-04-12 12:29:33

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: cronを使えない

cingyan さん

スクリプトに実行権限は付いていますか?
付いていなければ、実行できません。
bash を付けることで実行できているのは、bash にファイルを渡しているからです。


悪しき風習ですね → sh。
rec_radiko.sh の中身は見てみましたか?
1 行目は「#!/bin/bash」になっていますよ。
sh はどれかのシェルにリンクされており、ディストリビューション毎に異なるので、
sh を指定すると、想定していなかった挙動になることがあります。
なので、sh は使わずに、想定したシェルを指定してください。
この場合は、bash になります。


また、cron はスクリプトの前に、bash なり、csh なりが必要です。
それと、cron は相対パスは使わずにフルパスで指定されることをお勧めします。
今回の場合は、~ ではなく、/home/username (username は自身の環境に合わせて変更してください)
になります。

オフライン

 

#6 2016-04-12 14:22:28

bybywin
メンバ
From: 日本国群馬県
登録日: 2011-04-22

Re: cronを使えない

Audacityのタイマー録音機能を使用するのでは、だめなんでしょうか?

オフライン

 

#7 2016-04-12 17:22:08

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

bybywin様、御回答ありがとうございました。
もう少しで、今のやり方でできるのではないかと思うので、bybywin様の案は、取っておきます。
また、日にいくつもラジオ番組を録音することもあるので、スケジュールをいくつも設定できる必要があるので、もしかすると提案頂いたソフトに対応は難しいのではないかと思います。更に、使用するパソコンは、Pentium2の古い機種ですので、対応できるかということも怪しいです。


hellfire様、ご回答ありがとうございました。
実行権限については、確かに設定されていませんでしたので、設定しました。

次に、想定したシェルの指定ということですが、
crontab -eで、

コード:

# m h  dom mon dow   command
45 11 12 4 * bash /home/username/rec_radiko.sh FMTOYAMA 1 /home/username/test1

このようにするということでしょうか。

更に、

hellfire による投稿:

また、cron はスクリプトの前に、bash なり、csh なりが必要です。

というところですが、

コード:

# m h  dom mon dow   command
45 11 12 4 * bash /home/username/bash rec_radiko.sh FMTOYAMA 1 /home/username/test1

ということなのでしょうか。
私のレベルでは、分かりませんでした。

syslogを見ると、

コード:

CRON[5457]: (CRON) info (No MTA installed, discarding output)

と記録されていますが、解決のヒントになるでしょうか。

検索しても答えが見つからず、お教えいただくしかないと思うので、引き続きよろしくお願いします。

オフライン

 

#8 2016-04-12 18:50:01

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: cronを使えない

cingyan さん

syslog の件は、ログをメールで送る際に、送るプログラムがないというエラーなので、問題ありません。
username は、whoami コマンドで出てきたユーザ名を指定すれば良いです。


私の方でも確認してみましたが、cron だと確かに動きませんね。
指摘が的確でなくて申し訳ないです。

で、原因と解決する方法ですが、cron では実行するコマンドに
引数を与えるには少々トリッキーな方法を使わなければなりません。

なので、rec_radiko.sh を実行するためのスクリプトを作って cron に登録しましょう。
例えば、ホームディレクトリに cronexec.sh というファイルを作り、中身は以下のようにします。

コード:

#!/bin/bash
/home/username/rec_radiko.sh FMTOYAMA 1 /home/username/test1

(username は whoami の中身にしてください。)

そして、crontab は

コード:

45 11 12 4 * bash /home/username/cronexec.sh

(username は whoami の中身にしてください。)

とすることにより、うまく動作するはずです。


蛇足ですが、上記の cron の指定は、毎年の 4/12 の11時45分か、1回きりの実行ですよね?
1回きりであれば、at コマンドを使うという手もあります。
ご参考までに。

オフライン

 

#9 2016-04-14 15:48:47

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

hellfire様、御回答ありがとうございました。

結果は駄目でした。

コード:

# vi /var/log/cron

これで、ログが見られると書いてあるページを見つけて、

コード:

$ nano /var/log/cron

をしてみましたが、何も記録はありませんでした。

私自信、crontabを使うのが初めてなため、もしかすると、基本的な操作などに誤りがあるのではないかという気がするのですが、見当がつきません。

オフライン

 

#10 2016-04-14 16:01:04

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: cronを使えない

cingyan さん

確認しますが、cronexec.sh は単体で動きますか?
さらに、cronexec.sh も同様に実行権限を付けてください。


また、ログについてですが、#3 で私が書いた通り、
cron のエラーなどの内容は/var/log/cron ではなく、
/var/log/syslog で確認できます。
これはディストリビューションの違いにより変わるものなので、
CentOS や Debian のことを書いたサイトを見ても、ログの場所の参考にはなりません。

オフライン

 

#11 2016-04-14 16:26:58

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

単体で動かすとは下のようなことでよろしいでしょうか。

コード:

username@username-J3228:~$ bash /home/username/cronexec.sh
authtoken: c2A4oZnMIHXlHfLiF0PjAQ 
offset: 234114 length: 16 
partialkey: 9KGcu2flAPUnpu9/844qWw==
authentication success
areaid: JP16
/home/username/rec_radiko.sh: 127: /home/username/rec_radiko.sh: Syntax error: "(" unexpected

このようにターミナルで表示され、usernameのフォルダに、FMTOYAMA.xmlというファイルが作られます。

usernameのところは、念の為、記入を伏せたものです。

また、実行権限は、下の通りで良いと思っています。

コード:

-rwxrwxr-x 1 username username       60  4月 14 16:06 cronexec.sh

syslogは以下になります。

コード:

Apr 14 16:17:25 username-J3228 crontab[2060]: (username) BEGIN EDIT (username)
Apr 14 16:18:42 username-J3228 crontab[2060]: (username) REPLACE (username)
Apr 14 16:18:42 username-J3228 crontab[2060]: (username) END EDIT (username)
Apr 14 16:18:49 username-J3228 crontab[2080]: (username) LIST (username)
Apr 14 16:19:01 username-J3228 cron[569]: (username) RELOAD (crontabs/username)
Apr 14 16:20:01 username-J3228 CRON[2091]: (username) CMD (bash /home/username/cronexec.sh)
Apr 14 16:20:01 username-J3228 CRON[2090]: (CRON) info (No MTA installed, discarding output)

お手数かけます。

オフライン

 

#12 2016-04-14 16:47:25

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: cronを使えない

cingyan さん

初心者なので、分からないこともあるかと思いますが、
それ以上に回答者はそちらの状況を把握していないものです。
今回のように、実行内容だけでなく、それぞれの結果を提示されると
こちらとしてはとても助かります。


で、今回の問題は、cron 以前にスクリプト (rec_radiko.sh) の構文エラーのようですね。
→「/home/username/rec_radiko.sh: 127: /home/username/rec_radiko.sh: Syntax error: "(" unexpected」

これは、以前に私が書いた 1 行目 sh の表記による弊害のようです。
cingyan さんはこのトピックの #4 で、rec_radiko.sh の入手先 URL を 2 つ書かれておりますが、
2 つ目の URL からスクリプトをコピペしたようですね。
ちなみに、1 つ目の URL 先で紹介されている git からコピペしたスクリプトであれば、問題なく動きます。

これらは動作はほとんど一緒ですが、中身が微妙に異なります。特に1行目。
この1行目の「#!/bin/sh」を「#!/bin/bash」に書き換えてやることで、
2つ目の URL のスクリプトでも問題なく動きます。

オフライン

 

#13 2016-04-14 18:11:14

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

cronexec.sh単体で動かすことはできました。
スクリプトが2種類あることに気づいていませんで失礼致しました。
修正を加えたりして、どちらのスクリプトでも動くことが確認でしました。

それで、cronですが、どういう訳か失敗します。
syslogに

コード:

Apr 14 17:43:01 username-J3228 CRON[3454]: (username) CMD (bash /home/username/cronexec.sh)

とありますが、CMDとはコマンドだと思うと、実行していることになるから、変です。

cronからコマンドを実行した場合、ターミナルで処理している様子が表示されるのでしょうか。
試しに

コード:

# m h  dom mon dow   command
59 17 14 4 * gedit

としても、geditが起動しないのは、正しいのか否かも分かりません。

コード:

Apr 14 17:59:01 username-J3228 CRON[3704]: (username) CMD (gedit)

このように記録されているので、
cron自体に何か問題があるのかと思ってしまいます。
cronで設定する時間が、2分以上空ける必要があると、どこかのページで書いてあったのですが、私の場合それが短いのでしょうか。


hellfireさんは、cronでも動作の確認をされたのでしょうか。

何を提示すれば、解決になるのかも不明です。

オフライン

 

#14 2016-04-14 18:26:47

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: cronを使えない

cingyan さん

こちらでは cron の動作も確認済みです。


今、気づいたのですが、私の投稿した cronexec.sh の中に不備がありますね。
rec_radiko.sh の引数のファイル名の部分が足りてませんね。
これを入れたらどうなりますか?

オフライン

 

#15 2016-04-15 18:00:56

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

長らくお付き合い頂き、恐縮であります。

さて、ご指示いただいた、cronexec.shは下記で宜しいでしょうか。

コード:

#!/bin/bash
/home/username/rec_radiko.sh FMTOYAMA 1 /home/username/ test1

単独で、cronexec.shを実行すると、ちゃんと録音できるのですが、crontabで登録すると

コード:

# m h  dom mon dow   command
37 17 15 4 * bash /home/username/cronexec.sh

何も起きません。

$ service cron status
によると

コード:

username@username-J3228:~$ service cron status
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since 金 2016-04-15 11:42:05 JST; 6h ago
     Docs: man:cron(8)
 Main PID: 546 (cron)
   CGroup: /system.slice/cron.service
           └─546 /usr/sbin/cron -f

 4月 15 12:59:01 username-J3228 CRON[3234]: (username) CMD (bash /home/username/cronexec.sh)
 4月 15 14:24:01 username-J3228 cron[546]: (username) RELOAD (crontabs/username)
 4月 15 14:25:01 username-J3228 CRON[3982]: pam_unix(cron:session): session open...0)
 4月 15 14:25:01 username-J3228 CRON[3983]: (username) CMD (bash /home/username/cronexec.sh)
 4月 15 17:37:01 username-J3228 cron[546]: (username) RELOAD (crontabs/username)
 4月 15 17:37:01 username-J3228 CRON[4909]: pam_unix(cron:session): session open...0)
 4月 15 17:37:01 username-J3228 CRON[4910]: (username) CMD (/home/username/cronexec.sh)
 4月 15 17:40:01 username-J3228 cron[546]: (username) RELOAD (crontabs/username)
 4月 15 17:41:01 username-J3228 CRON[6226]: pam_unix(cron:session): session open...0)
 4月 15 17:41:01 username-J3228 CRON[6227]: (username) CMD (sh /home/username/cronexec.sh)
Hint: Some lines were ellipsized, use -l to show in full.

と表示され、cronは動いていると思われます。

そうなると、何が原因なのでしょうか。

オフライン

 

#16 2016-04-18 18:39:43

cingyan
メンバ
登録日: 2013-09-12

Re: cronを使えない

cronからエラーを出す方法をやってみました。

コード:

47 17 18 4 1 /bin/bash /home/username/cronexec.sh >>/tmp/analog.log 2>>/tmp/analog-err.log

すると
analog.logに、

コード:

failed get keydata

analog-err.logに、

コード:

/home/username/rec_radiko.sh: 行 46: swfextract: コマンドが見つかりません

と記録されていました。

調べて、

コード:

PATH=/usr/bin:/bin:/usr/local/bin

を一行目に入れて実行すると、録音できました。

お手数かけました。ありがとうございました。

オフライン

 

Board footer

Powered by FluxBB