LoginSignup
17
19

More than 1 year has passed since last update.

Ubuntuで起動時に自動でShellScriptを実行する方法

Posted at

はじめに

UbuntuでShellScriptやプログラムを自動で実行しようとしたとき、たまにハマるというのとそこそこ聞かれるので記事にしようと思いました。
serviceを使用する方法を使うためsystemctlコマンドで止めたり再起動をかけたりできるので私はこのやり方を使ってます。

環境

Ubuntu16.04

準備

ひとまずこの記事の内容を確認できるようにShellScriptの作成や権限付与の準備を行います。

ShellScriptの作成

ひとまず、テストでShellScriptを作成します。
場所はユーザー直下にします。
$ vim test.sh

~/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

/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

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19