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

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

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

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

Q&A

解決済

1回答

478閲覧

EC2(Ubuntu)を起動したときに自動でshellスクリプトを実行させたい

shinyspark

総合スコア13

Ubuntu

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

0グッド

0クリップ

投稿2023/08/21 07:36

実現したいこと

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を用いて作業を行っています。

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

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

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

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

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

melian

2023/08/21 07:48

crontab で @reboot タグを使うとよいかもしれません。(システム起動時に指定したコマンドやスクリプトが実行されます) 詳しくは man 5 crontab を参照してください。
shinyspark

2023/08/21 08:40

やってみたのですが、動かせませんでした…。 @reboot /bin/bash /home/ec2-user/environment/start_function.sh 上記をcrontab -eを行って記載したのですが、間違っている箇所を教えていただけるととてもうれしいです…。
melian

2023/08/21 08:52

実行時のログを取ってみると何か判るかもしれません。具体的には以下の様にして、 @reboot /bin/bash /home/ec2-user/environment/start_function.sh > /tmp/cron.log 2>&1 再起動後に /tmp/cron.log の内容を確認してみてください。
shinyspark

2023/08/21 09:27

教えていただいたとおりに書き込んでlogを取って確認してみたのですが、中身には何も書かれていませんでした…。
melian

2023/08/21 09:41

ファイル(/tmp/cron.log)の中身が空、ということはスクリプトは実行されているということになりますね。。。 そうなりますと、bash に -x オプションを付けてスクリプトの実行状況をトレースしてみるとよいかもしれません。時間が取れれば試してみてください。 @reboot /bin/bash -x /home/ec2-user/environment/start_function.sh > /tmp/cron.log 2>&1
otn

2023/08/21 12:25

念のため、 > 再起動後に /tmp/cron.log の内容を確認してみてください。 を確認しましょう。/tmp/cron.log がその時刻で作成されていれば大丈夫とは思いますが。
shinyspark

2023/08/22 00:52

otnさん 作成されたlogファイルの確認をしたところ、起動した時間にしっかりと作成されていました。 melianさん + nohup /usr/bin/python3 /home/ec2-user/environment/start_function.sh と出てきました。 mike2mike4さん 調べてそのサイトも出てきたのですがサービスの作成やらなんやら若干難しそうに見えたのでとりあえず別の方法を試してました…。 ただそうも言ってられなさそうなのでとりあえず触ってみます、ありがとうございます。
melian

2023/08/22 05:48

> + nohup /usr/bin/python3 /home/ec2-user/environment/start_function.sh > と出てきました。 念の為の確認ですが、/home/ec2-user/environment/start_function.sh はシェルスクリプトで python スクリプトではないですよね?
otn

2023/08/22 06:13

/home/ec2-user/environment/start_function.sh の中味を、質問を編集してコピペしましょう。
shinyspark

2023/08/22 09:21

お時間空いてしまって申し訳ございません、どのファイルもコードは間違ってなく、ただ権限周りをいじる必要があったのに何もしていなかっただけでした…。 現在ではしっかりとEC2サーバー起動時にシェルスクリプトを動かし、該当Pythonスクリプトを働かせるところまでできています。 ご迷惑をおかけしました、ありがとうございました…。
guest

回答1

0

自己解決

結果的にsystemdの設定を記載して行いました。
わたしの場合は権限の関係でサービスは動いていてもshellが動かせないというのが問題だったようです。
大変ご迷惑をおかけしました…。
いろいろと教えてくださりありがとうございました。

投稿2023/08/22 09:22

shinyspark

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問