こんにちは
crontabを使用して、起動時にスクリプトを実行したいのですが、できません。再起動時に実行したいため、
@reboot /絶対パス/my_script.sh
をcrontabに追加し、rebootしました。
ちなみに
sh /絶対パス/my_script.sh
で実行した場合は上手く動作してくれるため、shファイルの中身に間違いはないかと思います。
何か確認すべき事項、解決方法等している方教えていただけませんか?
【追記】
補足ですが、シェルスクリプト内のコマンドはpythonファイルの実行になります
実行するpythonファイルそのものは、usr/local/binに配置されています
シェルスクリプト内をtouchでファイル生成するといった別の簡単なコードでテストしたところ、無事動作しました、crontab自体は動いている様です
従って、シェルスクリプト内のコードを実行できていないだけだと思われるのですが、原因が分かりません
中身は2行で、cdで移動して、pythonファイルを実行しているコードになります
どなたか解決法分かる方いらっしゃいましたら、教えていただきたいです
提示されている内容を追加した crontab は、root権限で動かすやつ( /etc/crontab など)でしょうか、それともユーザーごとに分かれているほう( /var/spool/cron 以下など)でしょうか。
my_script.sh の先頭行には shebang (#!/bin/sh など)が付いていますか。また、my_script.sh に実行権限を与えましたか(念のため)。
「絶対パス」と書かれた部分に、/etcや/varとは別のパーティションのディレクトリは含まれていますか。
とりあえず、確認しておきたいのはこのぐらいでしょうか。
Daregadaさん
コメントありがとうございます。
sudoはつけていないです
my_script.shの先頭行にはshebangは記載しました。実行権限はchmod 755を書きました。
絶対パスについてなのですが、/home/yumiwo/Desktopです。
質問になるのですが、/etcや/varの階層下でないと上手く動作しないということですか?
理解できていない部分が多いので、雑な質問ですみません。
/home は、インストール時に別パーティションに分けましたか?
パーティションを分けていないなら、この問題には関係ありません。
別パーティションに分けたかどうかわからなかったので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]
/etc/fstab の内容に /home を含む行があれば、それを見てください。
/etc/fstabの内容確認しました。
/homeの記述はありませんでした。
こっちの筋ではなかったですね。
> 中身は2行で、cdで移動して、pythonファイルを実行しているコードになります
差し支えなければ、こちらのコードを提示してください。
shファイルの中身です
#!/bin/sh
1行目:cd /home/user-name/jetson-inference/python/training/classification
2行目:pythonfile.py --model=data/resnet50.onnx --input_blob=input_0 --output_blob=output_0 --labels=/home/user_name/datasets/data/labels.txt
pythonファイルはNVIDIAのjetsonのデモに沿って作成したものです
(https://github.com/dusty-nv/jetson-inference
https://github.com/dusty-nv/jetson-inference/blob/master/docs/pytorch-cat-dog.md)
まず、2行目のpythonをフルパスの指定に書き換えてみてください。「which python」で表示される内容でいいかと。
pythonファイルのフルパス書いて実行してみました。
今回のpythonファイルはカメラ接続する箇所もあります。現在カメラの調子があまり良くなく、そこの接触不良で出ていると思われるエラーが見られました。
また、カメラ接続を必要としない同じディレクトリ内のpythonファイルについても試してみたのですが、permission delayのエラーが出たため、そちらのpythonファイルについては、権限が違うファイルを呼び出していたのだと思います。
パスをきちんと書いてやることで、pythonファイル自体の読み込みは途中までですが動く様になったため、ファイルの中の細かい設定等を見直してみようと思います。
幾つも質問して申し訳ないのですが、もう二点ほどお聞きしたいです。
1.カメラの接続等を含んだコードを実行したい場合もcrontabで動かせるのでしょうか?
2.うまく再起動時の実行が行われた場合、どのタイミングでターミナル画面やカメラの画面があらわれるものなのでしょうか?
@rebootで指定された処理が実行されるのは、(OS起動後に)crondが起動した時点ですね。crondだけを再起動しても実行されないように工夫されています。
OS再起動直後に動作するとまずそうな内容のスクリプトであるなら、とりあえずは先頭に「sleep 600」とか入れて10分待ってはいかがか。
回答2件
あなたの回答
tips
プレビュー