メインコンテンツへスキップ
見出し画像

【配布】Linux Systemd簡単追加&タイマー設定支援スクリプトの紹介

    こんにちはRcatです。
    今回は過去に以下の記事で紹介しました。Linuxのsystemdへのスクリプト追加やタイマーの追加を支援するスクリプトを紹介するコーナーを、個別で作成することにしました。
    なんだかんだでいろんなところで使っているので、私が紹介で使い回したいからです。


    はじめに

    利用規約

    情報や作品の活用時は事前に利用規約をご確認ください。

    コメントについて

    利用規約のガイドラインを確認の上コメントしてください


    概要

    概要

    本スクリプトはLinuxでのスタートアッププログラムというか、タスクスケジュールの位置づけであるSystemdを使って任意のプログラムを起動時に実行したり、特定の時刻に実行したりする設定を簡単に行うための支援スクリプトです。


    支援ツールを導入する

    パッケージ内容

    パッケージ内容は以下の通りです。
    好きなところに格納してください。
    コマンドとして使うためにはエイリアスの登録する必要があります。
    参考のデータを入れておきますので、登録してください。

    画像

    エイリアス登録

    サンプルのエイリアスの中身はこんな感じです。

    alias CreateService-sh='sudo python3 /home/rcat/ドキュメント/scripts/CreateService_sh.py'
    alias CreateService-py='sudo python3 /home/rcat/ドキュメント/scripts/CreateService_py.py'
    alias ServiceAdd='sudo /home/rcat/ドキュメント/scripts/ServiceAdd.sh'
    alias ServiceRemove='sudo /home/rcat/ドキュメント/scripts/ServiceRemove.sh'

    systemctlを扱うのにルート権限がいるので、このエリアの段階でsudoをつけておきます。

    • CreateService_sh
      シェルスクリプトをサービスとして登録するのを支援するスクリプトです。今回のメインコンテンツです。

    • CreateService_py
      データとしては入っていますが、アップデートはしていないので非推奨です。

    • ServiceAdd
      出来上がったサービスファイルをsystemd登録するスクリプトです。

    • ServiceRemove
      登録済みのサービスを削除するスクリプトです。


    支援スクリプトを使ってサービスを作成する

    前提条件

    まず、最初に自動起動を実現するために必要な設定ファイルであるサービスファイルを作ります。

    基本的にはシェルスクリプトを起動する前提で話を進めていきます。
    なので、Pythonを起動したいっていう人は、Pythonを起動するシェルスクリプトを用意する必要があります。

    Pythonを起動するシェルスクリプトはこちらで作成しました。参考にしてください。

    前提はこんな感じです。バックアップアプリの自動起動と、タイマー起動をやっていきます。

    $ ls
    config.json  create.sh  main.py  requirements.txt  start.sh  venv

    まず最初にサービスを作ります。
    この中での起動スクリプトは"start.sh"なのでこれを対象にします。

    ユニットファイルの作成

    まずはコマンドを起動します。今回は何もないので1番を選択

    画像

    次にスクリプトのパスを入力します。
    この時"start.sh"という名前にしておくと自動的に検索されます。
    今回はこのままにしてあるので空欄でエンター

    画像

    続いて引数の入力です。特に受け付けないので、空欄でエンター。
    その後、サービス名を聞かれるので必ず英数字だけに入力してください。
    名前に利用可能な文字はsystemdの仕様を確認するようにしてください。

    画像

    名前の入力が終わると次は起動条件です。
    ネットワークのオンライン判定ができます。今回はサーバーなのでYESです。
    次にログの出力を聞かれていますが、Pythonの方でloggingしているので、標準出力をファイルに出力する必要はありません。NOです。

    画像

    全ての入力が終わるとサービスファイルのプレビューが表示されます。
    この内容で問題がなければ、Yを押して確定します。

    画像

    確定するとタイマーを作成するかどうか聞かれます。
    定期的な実行をしたい。サービスの場合はこのままタイマーの作成に移ります。なお、ここで作らないを選択してもタイマーだけ作成はできますのでご安心ください。

    画像

    こんな感じでサービスファイルが完成します。

    $ ls
    R_AutoBackUP.service  config.json  create.sh  main.py requirements.txt start.sh  venv

    中身はプレビューと同じです。
    もし細かい点を書き換えいただければ、登録前に書き換えてしまってください。例えばrootで実行したい場合はユーザーの行を消してください。

    画像

    自動起動へ登録

    出来上がったサービスファイルはServiceAddコマンドを使ってサービスに登録することができます。

    画像

    サービスに登録したら、自動起動の有効化及び今すぐ実行などを行います。
    ※タイマーを使う場合はここでは何もしないでください。

    #サーバー起動時に自動的に実行する場合
    $sudo systemctl enable R_AutoBackUP.service
    #今すぐ実行する場合、
    $sudo systemctl restart R_AutoBackUP.service

    支援スクリプトを使ってタイマーを作成する

    次に先ほど作成したサービスを特定の時刻や日付曜日などで定期的に実行できるタイマーを登録していきます。

    ユニットファイルの作成

    もう一度、先ほどのスクリプトを起動して2を選択するか、中断していない場合は、続けてタイマーの作成をしてください。

    画像

    まず最初に時刻の入力です。
    指示されたフォーマット通りに入力します。

    その次に日付を聞かれます。
    日付は登録してしまうと月1になってしまうので、基本的には*をお勧めします。

    画像

    次に曜日の選択です。
    ここでは各曜日に0から6までの数値が対応つけられており、その数値を入力するとフラグが反転します。
    フラグを反転させるには、数値を入力してエンターです。
    何も入力せずにエンターを押すと入力が確定します。

    画像

    月、水、金の場合

    画像

    曜日の入力が終わると確認画面が出ます。
    今回は毎日23時に実行ですね。
    問題がなければYをして確定します。

    画像

    作成後はこんな感じ。

    $ ls
    R_AutoBackUP.service  R_AutoBackUP.timer  config.json  create.sh  main.py  old  requirements.txt  start.sh  venv

    自動起動の登録

    出来上がったユニットファイルをServiceAddを使い登録します。

    画像

    タイマーで起動する場合はタイマーの方を有効化します。

    $ sudo systemctl enable R_AutoBackUP.timer
    Created symlink /etc/systemd/system/timers.target.wants/R_AutoBackUP.timer → /etc/systemd/system/R_AutoBackUP.timer.
    $ sudo systemctl start R_AutoBackUP.timer

    ステータスを確認するとこんな感じになっていればOKです。
    上の段がサービスの実行状態。タイマーなので止まっているはずです。
    下がタイマーの稼働状況。タイマーが待ちになっているはずなので、緑になっているはずです。

    画像

    これで完了です。
    あとは時刻が来た時に本当に動いているか確認してみましょう。


    サービスを削除する

    ServiceRemoveを使って簡単に削除できます。
    タイマーをセットした場合は、先にタイマーを削除してからサービスを削除してください。

    $ ServiceRemove R_AutoBackUP.timer
    R_AutoBackUP.timer
    File OK
    Removed /etc/systemd/system/timers.target.wants/R_AutoBackUP.timer.
    
    $ ServiceRemove R_AutoBackUP.service
    R_AutoBackUP.service
    File OK
    Removed /etc/systemd/system/network-online.target.wants/R_AutoBackUP.service.
    Removed /etc/systemd/system/multi-user.target.wants/R_AutoBackUP.service.

    まとめ

    今回はSystemdの簡単追加スクリプトを紹介しました。
    ユニットファイルの作成は他のプログラムから使い回してもいいですが、やる回数も多くないので省略している記述があった場合、入力し忘れる恐れがあります。

    そのため、今回のような支援ツールを使うことで、毎回同じ品質で作ることができます。
    タイマーをつけることはさらに少ないと思うので、使い回すにしてもあれどこをやったかな?みたいな感じになると思います。

    追加や削除の方も、そんなに頻繁にやるわけではないですし、中身を見ればわかりますが、特定のディレクトリにデータをコピーしたり、有効化したりと毎回同じことをやらされるんですね。

    というわけでこの辺まるっとまとめて支援ツールという感じにしていい感じに収めてみました。
    お役に立てば幸いです。


    配布情報

    配布URL

    以下のURLより配布しています。
    利用規約に同意の上ご利用ください。

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=Linux_サービス系


     
     
    モノづくりが趣味。 "売ってないなら自分で作ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワーク 全部やります。 記事執筆はAI不使用。 ご連絡や利用規約はプロフィール記事参照。

    あなたへのおすすめ