ホーム

go runでログをfileへ systemdを使う場合 - Webアプリ

皆さんこんにちわ。Hujisawaです。

本日は、技術エントリです。

僕は、goでウェブアプリを作ってるのですが

参考 : Goで開発したウェブサービス

なんかよく落ちる。自分はGoは一年未満足らずのキャリアしかないのでまだまだ勉強せねば。

go run で出てくるコマンドに流れてくるログをファイルに取得したい

自分はGoでWebアプリを作って、go run でウェブアプリを稼働して、そこでのログをとりたいので、go run で落ちてくるログを全てとりたいと考えてます。そのうち何かが原因で落ちるので、落ちた後に、そのエラーをファイルで取得しようという三段です。

systemdを使ってデーモン化してます

下記に実行手順を書いてるのですが、systemdを使ってアプリをデーモン化しています。なので、バックグラウンドでもちゃんとログ出力がファイルへ書き込まれ続けてくれないとダメです。

んで、実現した方法がこちら

環境

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
$ go version
go version go1.10.4 linux/amd64

実装

$ cd /etc/systemd/system
$ vi app.service
[Unit]
Description=App

[Service]
ExecStart=/bin/bash -c 'sudo go run main.go 2>> /home/ubuntu/go/src/html_menu_1/logfile'
WorkingDirectory=/home/ubuntu/go/src/html_menu_1/
Restart=always
Type=simple
User=ubuntu

[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl start app.service
$ sudo systemctl status app.service
$ tail -f /home/ubuntu/go/src/html_menu_1/logfile

参考

なぜかわからないけど

2>>

すると実現できた。こうすると、ちゃんと下記のファイルにログがtail -fで監視してたら落ちてきてた。

/logfile

-ホーム

Copyright© off , 2020 All Rights Reserved Powered by AFFINGER5.