systemdでサービス化した方がいいと言われたので、とりあえずやってみた。
①プロジェクトファイル(ここではsample)でgo build
②etc/systemd/systemにapp.serviceを作ります
③app.serviceに下記を記述
[Unit]
Description=Automatic start server demon
[Service]
ExecStart=/home/ec2-user/sample/sample
WorkingDirectory=/home/ec2-user/sample
Restart=always
Type=simple
User=ec2-user
[Install]
WantedBy=multi-user.target
【解説】
ExecStartで実行ファイルを指定
go buildしたらファイル名と同じバイナリが生成されるので、それを指定
WorkingDirectoryで実行するディレクトリを指定
Restart=always alwaysにすることで落ちても自動再起動してくれる
Type=simple 実行完了と判別するタイミングを指定
simple=コマンドが実行されたら
Type=forking=実行したコマンドが終了したら
Type=oneshot=コマンドが完了したら
User 実行するUser
WantedBy=multi-user.target enable時にこのユニットの.wantsディレクトリにリンクを作成する
これはよくわからなかった。
④sudo systemctl daemon-reload
を実行
app.serviceの内容を更新
⑤sudo systemctl enable /home/ec2-user/etc/systemd/system/app.service
を実行
サービスの自動起動を有効にする
*絶対パスで指定すること
⑥sudo systemctl start app.service
を実行
これで自動起動されます