はじめに
UbuntuでShellScriptやプログラムを自動で実行しようとしたとき、たまにハマるというのとそこそこ聞かれるので記事にしようと思いました。
serviceを使用する方法を使うためsystemctlコマンドで止めたり再起動をかけたりできるので私はこのやり方を使ってます。
環境
Ubuntu16.04
準備
ひとまずこの記事の内容を確認できるようにShellScriptの作成や権限付与の準備を行います。
ShellScriptの作成
ひとまず、テストでShellScriptを作成します。
場所はユーザー直下にします。
$ vim test.sh
#!/bin/sh
ping localhost > ~/test.log
このShellScriptは自身のPCのping応答テキストに残す内容になっています。
権限付与
実行権限を付与します。
$ chmod +x ~/test.sh
serviceファイルの作成
自動実行のためのserviceファイルを作成します。
今回はテストでauto_shell.serviceを作ります。
これはroot権限が必要になります。
$ sudo vim /etc/systemd/system/auto_shell.service
[Unit]
Description=ping service
After=network.target
[Service]
User=[ユーザー名]
ExecStart=/home/[ユーザー名]/test.sh
Restart=always
type=simple
[Install]
WantedBy=multi-user.target
ExecStartに実行ファイルを書くのですが、フルパスで入れないと起動しません。
よくハマっている人を見ます。
自動起動の設定
これを忘れてハマりました(1敗)
$ sudo systemctl enable auto_shell.service
後は再起動後/home/ユーザー名/test.logが生成されていれば成功です。
自動起動をやめる場合はdisableコマンドでやめれます。
$ sudo systemctl disable auto_shell.service
その他systemctlコマンド
シェルが動いているか確認するときやserviceファイルを更新したときに私が良く使うコマンドを紹介します。
serviceファイルの更新後に使用するコマンド
これを忘れて頭を悩ませることが多々ありました。(大敗)
$ sudo systemctl daemon-reload
serviceが動いているか確認するときのコマンド
エラー内容やactiveなのかdeadなのかが分かったりします。
$ sudo systemctl status auto_shell.service
serviceが自動起動状態か確認するコマンド
enbaleになっていれば自動起動の状態です。
$ sudo systemctl is-enable auto_shell.service
serviceを再起動するコマンド
これもよく使います。
$ sudo systemctl restart auto_shell.service