質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

cron

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

5390閲覧

初心者です。crontabがどうしても機能しなくて困っています。

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

cron

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/01/29 07:47

編集2017/01/29 07:48

初心者です。crontabがどうしても機能しなくて困っています。

一時的にUbuntu 16.04 LTSを使っていますが、普段はWindowsを使っていますので、いろいろネットで調べましたが、解決できなくてお手上げ状態です。

一応自分でやったことを書きます。なんとなくですが、何か根本的なことであったり、非常に初歩的なケアレスミスをしている気がします。

よろしくお願いします。

・crontab -eからnanoというエディターみたいなソフトを使って、「* * * * * touch /test /result.txt 2>&1」というコマンドを設定しています。このコマンドはcronが動くかどうか試すために設定しているだけで、実際cronを使ってやりたいことは別のことです。touch他のコマンドもいくつか試してみましたが、cronは機能しませんでした。そのときは.shというファイルを実行するコマンドだったので、chmodで実行権限を与えましたが、それでも機能しませんでした。

'・touchでtestファイルが作られないだけではなく、result.txtは一切出力されません。

・GUIのシステムモニターを起動しても、「crond」「cron」という文字列を含むプロセスはありません。

・「crontab -l」と打つと、このような途中から切れた文字列が出てきます。
~$ /result.txt 2>&1bin:/bin:/usr/sbin:/usr/binn(8)

・「crontab -e」と打つと、「/tmp/crontab.x0x0x0/crontab」というファイルを編集しているようです。(xは英字で0は数字です。)

・「crontab -e」と打つと、中身はこのようになっています。コメントアウト以外の部分を自分で設定しました。最初の4行はあってもなくてもcrontabは機能しません。
'# Edit this file to introduce tasks to be run by cron.
'#
'# Each task to run has to be defined through a single line
'# indicating with different fields when the task will be run
'# and what command to run for the task
'#
'# To define the time you can provide concrete values for
'# minute (m), hour (h), day of month (dom), month (mon),
'# and day of week (dow) or use '*' in these fields (for 'any').'#
'# Notice that tasks will be started based on the cron's system
'# daemon's notion of time and timezones.
'#
'# Output of the crontab jobs (including errors) is sent through
'# email to the user the crontab file belongs to (unless redirected).
'#
'# For example, you can run a backup of all your user accounts
'# at 5 a.m every week with:
'# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
'#
'# For more information see the manual pages of crontab(5) and cron(8)
'#
'# m h dom mon dow command

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/

          • touch /test /result.txt 2>&1

'・sudo 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 土 2017-01-28 16:44:43 JST; 23h ago
Docs: man:cron(8)
Main PID: 650 (cron)
Tasks: 1 (limit: 512)
CGroup: /system.slice/cron.service
└─650 /usr/sbin/cron -f

1月 29 12:17:01 username CRON[12786]: pam_unix(cron:session): session opened for user root by (uid=0)
1月 29 12:17:01 username CRON[12787]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
1月 29 13:17:01 username CRON[14515]: pam_unix(cron:session): session opened for user root by (uid=0)
1月 29 13:17:01 username CRON[14516]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
1月 29 13:17:01 username CRON[14515]: pam_unix(cron:session): session closed for user root
1月 29 14:17:01 username CRON[15658]: pam_unix(cron:session): session opened for user root by (uid=0)
1月 29 14:17:01 username CRON[15659]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
1月 29 14:17:01 username CRON[15658]: pam_unix(cron:session): session closed for user root
1月 29 15:17:01 username CRON[17319]: pam_unix(cron:session): session opened for user root by (uid=0)
'1月 29 15:17:01 username CRON[17320]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)

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

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

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

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

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

guest

回答3

0

ベストアンサー

cronは動いていると思われます。

/etc/cron.allow /etc/cron.deny が存在するか、存在する場合には中に何か書いてあるか、確認してください。どちらも存在しない場合は、sudo touch /etc/cron.deny とdenyの方の空ファイルを作って下さい。

・「crontab -l」と打つと、このような途中から切れた文字列が出てきます。

ということから、ファイルが壊れている可能性もあります。あるいはファイルが壊れていなくて、端末の設定がおかしいだけかもしれません。
crontab -l | wcで、どう出力されますか?

投稿2017/01/29 10:59

otn

総合スコア84423

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

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

退会済みユーザー

退会済みユーザー

2017/01/29 11:47

どうもありがとうございます。 ターミナルからは、touchできますので、テキストファイルが生成されます。 touch /media/username/USB/test 「crontab -l | wc」は、このように返ってきます。 0 256 1495 >端末の設定がおかしいだけかもしれません。 なんとなくですが、これはありえそうな気がします。 「/etc/cron.allow」「/etc/cron.deny」は、いずれも存在しませんでしたので、「sudo touch /etc/cron.deny」で作成しました。しかし、cronは実行されません。 よろしくお願いします。
otn

2017/01/29 12:38

> 0 256 1495 壊れてますね。最初の数字は行数(改行文字の数)です。 改行文字がおかしい。 crontab -l | file - で、 with CR line terminators と表示されたら、改行文字がおかしかったということなので、 crontab -l | tr '\r' '\n' > workfile crontab workfile で、復元できます。 file - の結果に with CR line terminators がなければ、その結果をそのまま書いてください。
退会済みユーザー

退会済みユーザー

2017/01/30 10:03

おかげさまで、touchは動くようになりました。どうもありがとうございます。 最初に「crontab -l | file -」と打ったときは、このように返ってきました。 /dev/stdin: UTF-8 Unicode text, with CR line terminators 教えていただいたように修正してから、「crontab -l | file -」と打ったときは、このように返ってきます。 /dev/stdin: UTF-8 Unicode text ・このように返ってきていれば、正常だと言えるでしょうか? ・実際は、コマンドが一つではないので、.shのファイルを起動しています。 * * * * * /media/username/device/test.sh メールを送らないようにしたので、.shのファイルには、MAILTO=""を書いていますが、これらを書くと、エラーメッセージがポップアップウィンドウにでてきて、cronからプログラムは起動されません。メールを送らないようにするにはどうしたらよいでしょうか?またどうしてもこれらを書かなくてはいけない場合にはどすればよいでしょうか? SHELL=/bin/s PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ ・ファイルを置いとく場所は、どこでもよいと思いますが、安全でエラーが起きにくい場所や、cronのときによく使われる場所や、ここに置くとわかりやすいという場所はあるでしょうか?たとえば、/tmpはどうでしょうか? ・nanoというコマンドライン専用のエディタを扱うだけでも苦労しましたので、そのときに間違えて変な設定をしてしまた可能性はあると思います。今回の原因は何だったのでしょうか? ・初級中級レベルでは、今回の問題を自力で解決するのは、無理でしょうか? よろしくお願いします。
otn

2017/01/30 13:36

> ・このように返ってきていれば、正常だと言えるでしょうか? 改行文字については正常です。改行文字以外の原因でおかしいことはあり得ます。 > メールを送らないようにするにはどうしたらよいでしょうか? 標準出力・標準エラー出力に何も出力せず、コマンド全体がRC=0で終わればメールは送られません。 test.shの先頭で、exec >/tmp/logfile 2>&1 とリダイレクトを書き、最後にexit 0と書けば良いです。 > ファイルを置いとく場所は、どこでもよいと思いますが、 コマンドファイルだと、ホームディレクトリの下、普通は$HOME/bin とかですね。 一時ファイルだと、他とファイル名がぶつからないように注意して、/tmpか、/var/tmp でしょうか。 あるいは、$HOMEの下でも良いと思います。 > 今回の原因は何だったのでしょうか? nanoの操作ミスだと思いますが、使ったこと無いので分かりません。 > ・初級中級レベルでは、今回の問題を自力で解決するのは、無理でしょうか? ファイルの文字コードや改行コードがおかしいと気づかないのは、中級とは言えないと思います。 初級者でも、 > ・「crontab -l」と打つと、このような途中から切れた文字列が出てきます。 の時点で何かcrontabファイルの中がおかしいと気づいて欲しいところです。解決方法は自力でなくても良いけど。
退会済みユーザー

退会済みユーザー

2017/01/31 05:56

ありがとうございました。無事解決できました。
guest

0

クーロンテストなら下記の様に書いても良いかと。

          • touch /test >/result.txt 2>&1

投稿2017/01/29 09:44

A.Ichi

総合スコア4070

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

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

0

crontabを初めて起動するとcrontabのテンプレートにコメントが書いてあり「やりたい仕事を1行に1つ記述しなさい」と書いてあります。ですから、

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ ...

このような記述をしてしまうことはcrontabのフォーマットに違反していると思います。お試しでやるなら例えば次のような行のみにするとよいです(元々あるコメントは消さなくていいですよ!)

* * * * * touch $HOME/crontest

またcrontab -eで編集する場合、それを行ったユーザー用のcronタスクを定義することになります。もしこれをユーザーu1で設定したとするとユーザーu1の実行権限を持つプロセスで仕事が行われるので

* * * * * touch /file

とするならユーザーu1は/に対する書き込み権限(/fileがないときにファイルを作るために)や/fileに対する書き込み権限が必要です。もし権限がない状態でこういうcrontabを定義してしまうとスケジュールされたタスクが実行されたときエラーとなり、それがu1のメールボックスへ以下のように投函される結果になります。

$ mail "/var/mail/u1": 1 message 1 new From: root@xxx.xxx (Cron Daemon) To: u1@xxx.xxx Subject: Cron <u1@xxxx> touch /file ... Date: Sun, 29 Jan 2017 17:30:01 +0900 (JST) touch: '/file' に touch できません: 許可がありません

投稿2017/01/29 08:52

編集2017/01/29 08:57
KSwordOfHaste

総合スコア18392

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

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

KSwordOfHaste

2017/01/29 10:28

$HOMEって書くのは古くさいでしょうかね・・・(^^;
退会済みユーザー

退会済みユーザー

2017/01/29 10:32

どうもありがとうございます。 書き込み権があると思われる領域にファイルを作ってみましたが、すべてダメでした・・・ * * * * * touch /home/username/デスクトップ/test /home/username/デスクトップ/result.txt 2>&1 * * * * * touch /home/username/'デスクトップ'/test /home/username/'デスクトップ'/result.txt 2>&1 * * * * * touch /media/username/device1/test /media/username/device1/result.txt 2>&1 * * * * * sudo touch /home/username/デスクトップ/test /home/username/デスクトッ$ * * * * * sudo touch /home/username/'デスクトップ'/test /home/username/'デスク $ * * * * * sudo touch /media/username/USB/test /media/username/USB/result.txt 2>$ * * * * * sudo touch ~/test >~/result.txt 2>&1 * * * * * touch ~/test >~/result.txt 2>&1 * * * * * sudo touch ~/test >~/result.txt 2>&1 * * * * * touch ~/media/username/USB/test >~/media/username/USB/result.txt 2>&1 * * * * * sudo touch ~/media/username/USB/test >~/media/username/USB/result.txt 2>&1 「sudo service cron status」と打つ限りでは、cron自体は動いてるような気がするのですが、能力的にメッセージを正確に読み取ることができません。 なんとなくですが、何か根本的なことであったり、非常に初歩的なケアレスミスをしている気がします・・・ 正直お手上げ状態なので、どうか解決策をいただけないでしょうか? ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since 土 2017-01-28 16:44:43 JST; 1 day 2h ago Docs: man:cron(8) Main PID: 650 (cron) Tasks: 1 (limit: 512) CGroup: /system.slice/cron.service └─650 /usr/sbin/cron -f 1月 29 16:17:01 username CRON[18321]: pam_unix(cron:session): session opened for user root by (uid=0) 1月 29 16:17:01 username CRON[18322]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) 1月 29 16:29:01 username cron[650]: (username) RELOAD (crontabs/username) 1月 29 18:17:01 username CRON[21752]: pam_unix(cron:session): session opened for user root by (uid=0) 1月 29 18:17:01 username CRON[21753]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) 1月 29 18:17:01 username CRON[21752]: pam_unix(cron:session): session closed for user root 1月 29 18:51:01 username cron[650]: (username) RELOAD (crontabs/username) 1月 29 18:56:01 username cron[650]: (username) RELOAD (crontabs/username) 1月 29 18:59:01 username cron[650]: (username) RELOAD (crontabs/username) 1月 29 19:05:01 username cron[650]: (username) RELOAD (crontabs/username)
KSwordOfHaste

2017/01/29 11:06 編集

自分がやった手順はsudoを一切使わず(自分が普段使うuserで) $ cd $ crontab -e * * * * * touch $HOME/crontest <==この行だけ追加 この設定では1分ごとに実行される。よってしばしまって1分以上経過したら以下で日付が変わっている(touchされている)ことを確認する。 $ ls -l crontest それ以外は何もしてないです。crontabl -eで設定を変えるとcronが自動的にそれを検出してくれて動いてくれてます。 なおcronで動かそうとするコマンドがあらかじめ実行できることを確認しておいてからcrontab -eしたほうがいいかも知れません。 $ cd $ touch crontest これがうまくいけばcrontab -e で * * * * * touch ~/crontest あるいは * * * * * touch $HOME/crontest と書けば成功するはずですから。
退会済みユーザー

退会済みユーザー

2017/01/29 11:47

どうもありがとうございます。 ターミナルからは、touchできますので、テキストファイルが生成されます。 touch /media/username/USB/test
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問