実現したいこと
Ubuntu環境のEC2を起動したときに自分で作ったshellのスクリプトを自動で実行してほしいです。
前提
Pythonでの作業のためにUbuntu環境でEC2を立ち上げています。
EC2を立ち上げたときに指定のPythonファイルを実行する処理を作りたく、shell→Pythonはすでに調べて作れているのですが、EC2起動→shellができません。
また、Ubuntu環境ではchkconfigは使えないらしく、update-rc.dを使わないといけない?らしいのですが、いまいち使い方がわからず詰まってしまっています・・・。
発生している問題・エラーメッセージ
・EC2起動時にshellを動かそうとしても動かない
・Ubuntu環境でchkconfigが使えないためupdate-rc.dを使っているが、調べてもいまいち使い方がわからずコードをいじったりができない
該当のソースコード
start.sh
1#!/bin/sh 2# chkconfig: 345 99 10 3# description: start_function shell 4case "$1" in 5 start) 6 su -l ec2-user -c "sh /home/ec2-user/environment/start_function.sh" 7 ;; 8 stop) 9 /usr/bin/kill python 10 ;; 11 *) break ;; 12esac
試したこと
上に記載した通り直接shellを動かしてpythonを実行させることには成功しています。
また、update-rc.dを使って自動実行に追加することも恐らくできていると思うのですが、コードの中に"# chkconfig"とある場所を何かしらいじらなければならないのだろう、というところで止まっています。
補足情報(FW/ツールのバージョンなど)
Ubuntu 20.04 環境
VSCodeを用いて作業を行っています。
crontab で @reboot タグを使うとよいかもしれません。(システム起動時に指定したコマンドやスクリプトが実行されます) 詳しくは man 5 crontab を参照してください。
やってみたのですが、動かせませんでした…。
@reboot /bin/bash /home/ec2-user/environment/start_function.sh
上記をcrontab -eを行って記載したのですが、間違っている箇所を教えていただけるととてもうれしいです…。
実行時のログを取ってみると何か判るかもしれません。具体的には以下の様にして、
@reboot /bin/bash /home/ec2-user/environment/start_function.sh > /tmp/cron.log 2>&1
再起動後に /tmp/cron.log の内容を確認してみてください。
教えていただいたとおりに書き込んでlogを取って確認してみたのですが、中身には何も書かれていませんでした…。

ファイル(/tmp/cron.log)の中身が空、ということはスクリプトは実行されているということになりますね。。。
そうなりますと、bash に -x オプションを付けてスクリプトの実行状況をトレースしてみるとよいかもしれません。時間が取れれば試してみてください。
@reboot /bin/bash -x /home/ec2-user/environment/start_function.sh > /tmp/cron.log 2>&1
念のため、
> 再起動後に /tmp/cron.log の内容を確認してみてください。
を確認しましょう。/tmp/cron.log がその時刻で作成されていれば大丈夫とは思いますが。
otnさん
作成されたlogファイルの確認をしたところ、起動した時間にしっかりと作成されていました。
melianさん
+ nohup /usr/bin/python3 /home/ec2-user/environment/start_function.sh
と出てきました。
mike2mike4さん
調べてそのサイトも出てきたのですがサービスの作成やらなんやら若干難しそうに見えたのでとりあえず別の方法を試してました…。
ただそうも言ってられなさそうなのでとりあえず触ってみます、ありがとうございます。
> + nohup /usr/bin/python3 /home/ec2-user/environment/start_function.sh
> と出てきました。
念の為の確認ですが、/home/ec2-user/environment/start_function.sh はシェルスクリプトで python スクリプトではないですよね?
/home/ec2-user/environment/start_function.sh
の中味を、質問を編集してコピペしましょう。
お時間空いてしまって申し訳ございません、どのファイルもコードは間違ってなく、ただ権限周りをいじる必要があったのに何もしていなかっただけでした…。
現在ではしっかりとEC2サーバー起動時にシェルスクリプトを動かし、該当Pythonスクリプトを働かせるところまでできています。
ご迷惑をおかけしました、ありがとうございました…。

回答1件
あなたの回答
tips
プレビュー