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

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

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

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

Ubuntu

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

Q&A

解決済

2回答

3947閲覧

ubuntuでcrontabの設定が反映されない

yumiwo

総合スコア5

cron

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

Ubuntu

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

0グッド

0クリップ

投稿2020/06/23 16:18

編集2020/06/24 01:36

こんにちは
crontabを使用して、起動時にスクリプトを実行したいのですが、できません。再起動時に実行したいため、

@reboot /絶対パス/my_script.sh

をcrontabに追加し、rebootしました。

ちなみに

sh /絶対パス/my_script.sh

で実行した場合は上手く動作してくれるため、shファイルの中身に間違いはないかと思います。

何か確認すべき事項、解決方法等している方教えていただけませんか?

【追記】
補足ですが、シェルスクリプト内のコマンドはpythonファイルの実行になります
実行するpythonファイルそのものは、usr/local/binに配置されています

シェルスクリプト内をtouchでファイル生成するといった別の簡単なコードでテストしたところ、無事動作しました、crontab自体は動いている様です
従って、シェルスクリプト内のコードを実行できていないだけだと思われるのですが、原因が分かりません
中身は2行で、cdで移動して、pythonファイルを実行しているコードになります

どなたか解決法分かる方いらっしゃいましたら、教えていただきたいです

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

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

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

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

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

Daregada

2020/06/23 16:24

提示されている内容を追加した crontab は、root権限で動かすやつ( /etc/crontab など)でしょうか、それともユーザーごとに分かれているほう( /var/spool/cron 以下など)でしょうか。
Daregada

2020/06/23 16:33

my_script.sh の先頭行には shebang (#!/bin/sh など)が付いていますか。また、my_script.sh に実行権限を与えましたか(念のため)。
Daregada

2020/06/23 16:39 編集

「絶対パス」と書かれた部分に、/etcや/varとは別のパーティションのディレクトリは含まれていますか。 とりあえず、確認しておきたいのはこのぐらいでしょうか。
yumiwo

2020/06/23 16:49

Daregadaさん コメントありがとうございます。 sudoはつけていないです my_script.shの先頭行にはshebangは記載しました。実行権限はchmod 755を書きました。 絶対パスについてなのですが、/home/yumiwo/Desktopです。 質問になるのですが、/etcや/varの階層下でないと上手く動作しないということですか? 理解できていない部分が多いので、雑な質問ですみません。
Daregada

2020/06/24 01:43

/home は、インストール時に別パーティションに分けましたか? パーティションを分けていないなら、この問題には関係ありません。
yumiwo

2020/06/24 02:03

別パーティションに分けたかどうかわからなかったのでlsblkで確認してみました。 これは分かれてしまっているということでいいんでしょうか? NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 16M 1 loop mtdblock0 31:0 0 32M 0 disk mmcblk0 179:0 0 59.5G 0 disk ├─mmcblk0p1 179:1 0 59.2G 0 part / ├─mmcblk0p2 179:2 0 64M 0 part ├─mmcblk0p3 179:3 0 64M 0 part ├─mmcblk0p4 179:4 0 448K 0 part ├─mmcblk0p5 179:5 0 448K 0 part ├─mmcblk0p6 179:6 0 63M 0 part ├─mmcblk0p7 179:7 0 512K 0 part ├─mmcblk0p8 179:8 0 256K 0 part ├─mmcblk0p9 179:9 0 256K 0 part ├─mmcblk0p10 179:10 0 100M 0 part └─mmcblk0p11 179:11 0 18K 0 part zram0 252:0 0 970.5M 0 disk [SWAP] zram1 252:1 0 970.5M 0 disk [SWAP]
Daregada

2020/06/24 03:15

/etc/fstab の内容に /home を含む行があれば、それを見てください。
yumiwo

2020/06/24 04:30

/etc/fstabの内容確認しました。 /homeの記述はありませんでした。
Daregada

2020/06/24 04:44

こっちの筋ではなかったですね。 > 中身は2行で、cdで移動して、pythonファイルを実行しているコードになります 差し支えなければ、こちらのコードを提示してください。
Daregada

2020/06/24 05:10

まず、2行目のpythonをフルパスの指定に書き換えてみてください。「which python」で表示される内容でいいかと。
yumiwo

2020/06/24 06:11

pythonファイルのフルパス書いて実行してみました。 今回のpythonファイルはカメラ接続する箇所もあります。現在カメラの調子があまり良くなく、そこの接触不良で出ていると思われるエラーが見られました。 また、カメラ接続を必要としない同じディレクトリ内のpythonファイルについても試してみたのですが、permission delayのエラーが出たため、そちらのpythonファイルについては、権限が違うファイルを呼び出していたのだと思います。 パスをきちんと書いてやることで、pythonファイル自体の読み込みは途中までですが動く様になったため、ファイルの中の細かい設定等を見直してみようと思います。 幾つも質問して申し訳ないのですが、もう二点ほどお聞きしたいです。 1.カメラの接続等を含んだコードを実行したい場合もcrontabで動かせるのでしょうか? 2.うまく再起動時の実行が行われた場合、どのタイミングでターミナル画面やカメラの画面があらわれるものなのでしょうか?
Daregada

2020/06/24 06:27

@rebootで指定された処理が実行されるのは、(OS起動後に)crondが起動した時点ですね。crondだけを再起動しても実行されないように工夫されています。
Daregada

2020/06/24 06:31

OS再起動直後に動作するとまずそうな内容のスクリプトであるなら、とりあえずは先頭に「sleep 600」とか入れて10分待ってはいかがか。
guest

回答2

0

ありがちなのは、/home以下を別パーティションに分けており、my_script.sh/home/your_account以下のどこかに置かれていて、まだマウントされていないタイミングでcronがシェルスクリプトを実行しようとしている、みたいなやつ。

投稿2020/06/23 16:43

Daregada

総合スコア11990

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

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

0

ベストアンサー

ターミナルで「sh」を付けて確認しているのなら、crontabでも「sh」を付けないと同じにならないんじゃないでしょうか

@reboot sh /絶対パス/my_script.sh

また、定義されている環境変数が違っていることが原因で、ターミナル上では実行出来てもcronではうまく実行できないことがあります。

※追記
デバッグ方法の一例としては次のようにします。

@reboot sh -x /絶対パス/my_script.sh >/tmp/hoge-out.$$ 2>/tmp/hoge-err.$$

「-x」は実行状況を標準エラー出力に出力するオプションです。
「/tmp/hoge-out.(数字)」に標準出力の内容、「/tmp/hoge-err.(数字)」に標準エラー出力の内容が書き込まれます。
あと、スクリプトの中で「printenv」を実行するようにするとスクリプト実行時の環境変数の状態が確認出来るようになります。

投稿2020/06/23 16:28

編集2020/06/23 17:33
hidezzz

総合スコア1248

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

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

yumiwo

2020/06/23 16:50

hidezzzさんありがとうございます。 試してみたのですが、再起動した際に実行されませんでした。 環境変数が違うことが原因かもしれないとのことですが、それを確認する方法ご存知であれば教えていただきたいです。
hidezzz

2020/06/23 17:33

回答にデバッグ方法の一例を追記しました。
yumiwo

2020/06/24 04:36

追記ありがとうございます。 エラーの内容を見てみたのですが、shファイル内に記載した実行したいpythonファイルをみつけることができていないみたいです。 ファイルの置き場所などの影響はあるのでしょうか? 重複になりますが、shファイル単独で実行した際はうまく動作するので、パスは間違っていないはずです
hidezzz

2020/06/24 05:11

明示的にパスをしていない限りcron実行される際のPATHは必要最低限のものになっていると思いますが、そのへんは大丈夫でしょうか?コマンドをすべてフルパスにしているのであれば大丈夫ですが…。 パスはスクリプトに「printenv」コマンドを入れておけばファイルに出力されます。 その他、スクリプトに動作の確認のためのデバッグ出力を入れて、出力されたファイルの内容を確認してみてください。
yumiwo

2020/06/24 06:15

コマンドを全てフルパスにしてみたところpythonファイルの読み込み自体は動き出しました。 私のミスでエラーが出てくる箇所がみられますのでそこっを解消していこうと思います。 デバック出力を入れて確認しながら作業していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問