なんかサービスを作ってlinux上で動かす場合、最近だとsystemdのserviceファイルを書いて、/etc/systemd/system/ の下に置くことになっている。
10.6. systemd のユニットファイルの作成および変更 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
nginxとかもそうなんだけど、こうやって/etc/の下に設定ファイルをおいてしまうと、そのファイルはサービスとは別に管理することになってしまうので、秘伝のソース化しやすい。できればプロジェクトコードと一緒にgit管理下においておきたい。
(別案として、Dockerとかを使ってサーバをまるごとmachine as a serviceに管理できればよりベターかも知れないけど、それはまた別の話)
そのために、/etc/systemd/system/からプロジェクト内に作った moapi.service ファイルにシンボリックを作ってみるのだけど、なんかうまく行かなさそうに見える
$ ls -la /etc/systemd/system
total 40
:
lrwxrwxrwx 1 root root 33 2019/10/22 17:28:58 moapi.service -> /var/www/moapi/rack/moapi.service
$ sudo systemctl enable moapi
Failed to execute operation: Too many levels of symbolic links
man systemctl見ると、systemctl linkで作ると良いぽいことが書いてあった
$ sudo systemctl link /var/www/moapi/rack/moapi.service
Created symlink from /etc/systemd/system/moapi.service to /var/www/moapi/rack/moapi.service.
$ sudo systemctl enable /var/www/moapi/rack/moapi.service
Created symlink from /etc/systemd/system/multi-user.target.wants/moapi.service to /var/www/moapi/rack/moapi.service.
シンボリックリンクで登録する場合、enableまではファイル名で指定してあげないといけないらしい。
以後start/stopは名前だけで実行できるようになる
sudo systemctl start moapi