Linux 立上げ時の自動起動

最近も日常に追われすぎていて、何をやっても中途半端に中断してしまい、続きがいつになるか分からない日々が続いています。

今回の作業背景

PCを利用していて痛い目に何度も遭っている経験から、今最重要課題と捉えているのが、作業結果を意識しないでできるバックアップ環境を作ることだと考えています。私は普段使いの Linux (Ubuntu) をセットアップしているノートPCを日常で利用しているのですが、その中で作業した内容はある程度無意識で定期的に共有サーバーにバックアップしています。
そのバックアップ方法は、単純な方法で cron を利用して rsync コマンドで、定期間隔の非同期でネットワークサーバーに転送する方法で実現しています。転送されたサーバーからは更に1日1回の頻度て他のサーバーにもコピーしています。
常にバックアップしているのに、では何が問題なのか、実は普段利用することも少ない Windows系 OSもデュアルブートできる環境で、Linux で実現できていない一部のアプリを利用することも時にはあります。その中で作業した内容については適切なバックアップができないでいます。意識してコピーする方法なら今でも面倒な作業として出来るのですが、無意識でバックアップして欲しいのが本音です。
そこで壁に当たりました。自動的に Windows パーティションをバックアップするには、

  • Windows を操作しているタイミングでの自動バックアップ
  • Linux で操作しているタイミングでの自動バックアップ

普段の利用は、Linux なので、負荷増になる無用なバックアッププロセスが常時稼働するのは避けたいので、Windows から Linux に切り替えるタイミングでの実行が理想だろうと考えて、過去の定番な方法 SysV init 立上げプロセスでの rc.local を模索したのですが、システム立上げ時に実行することが出来ないようです。機能しないのかタイミングでエラーしているのかは不明です。
最近の Linux システムは、立上げ時の方法が従来の SysV init から systemd に変わっているようで、私のノートPCも変わっているような気がします。そこで試行錯誤してみることにしました。
参考にしたサイトは、作り方を事細かく説明してくれています。


ここからが作業の試行錯誤の本題

実行したことをすぐに忘れる自分のための備忘録です。
Linux 起動時に、一度だけ Windows パーティションの一部を共有サーバーにバックアップする。Linux 立上げ前に Windows を利用していたかは問題外として、バックアップを実行したタイムスタンプをバックアップエリア内に残しておくこととします。
実際の組込み前に、参考にしたサイトの手順を自分の学習と動作確認のために実行してみることから始めます。他の情報の説明によると systemd に登録するサービスの指示書をユニットファイルと呼んでいるようです。
パッケージ名: NoteStartUpRun で、ユニットファイル名: note-startup-1st.service としてみました。何かちょっとネーミングがおかしいかなとも思いますが、私の頭の中では最初に実行する処理なので -1st を付けてみました。まぁただの名前なのでここから始めます。
サービス(ユニットファイル)の登録は、 /etc/systemd/system/note-startup-1st.service になるようで、この中には登録するサービスの情報を決められた書式で記述するようです。
そして実際に動作させるプログラムは、パッケージ名で管理するディレクトリに記述するようですが、 /opt/NoteStartUpRun/bin となっていて、一般的な実行形式のコマンドを入れる bin に集めているようです。そこで疑問ですが、パッケージディレクトリには、bin 以外に本来は何が置かれているのでしょう…深く考えないで進めます。

systemd の動作を確認する雛形作り

参考サイトがカレントで作成して、それを該当するディレクトリにコピーして、所有者を root に変更したり、アクセス権の変更をしているので、私もその方法を踏襲します。

$ vi note-startup-1st.service
[Unit]
Description = Note Private AutoRun
After=network-online.target remote-fs.target nss-lookup.target
ConditionPathExists=/opt/NoteStartUpRun/bin
[Service]
ExecStart=/opt/NoteStartUpRun/bin/note-stup-1st.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target

$ sudo cp note-startup-1st.service /etc/systemd/system
$ sudo chown root:root /etc/systemd/system/note-startup-1st.service
$ sudo chmod 644 /etc/systemd/system/note-startup-1st.service
$ vi note-stup-1st.sh
#!/bin/sh
exec /usr/bin/env python /opt/NoteStartUpRun/bin/Python-Sample.py

$ sudo mkdir -p /opt/NoteStartUpRun/bin
$ sudo chmod 755 /opt/NoteStartUpRun/bin
$ sudo cp note-stup-1st.sh /opt/NoteStartUpRun/bin
$ sudo chown root:root /opt/NoteStartUpRun/bin/note-stup-1st.sh
$ sudo chmod 755 /opt/NoteStartUpRun/bin/note-stup-1st.sh

実際に動作するサンプルプログラム

最終的に起動されるサンプルプログラムは、bash や ruby または python でも構わないのでしょうけど、参考サイトにある例をそのまま丸コピーしてきました。検証作業の説明も丁寧に行われているので、見比べるのにも最適なので利用させて頂いています。例では python で組まれた1秒毎にメッセージを書き出す無限ループの処理で、Python-Sample.py として、次の記述です。

$ vi Python-Sample.py
#!/usr/bin/env python
import sys
from time import sleep
if __name__ == '__main__':
  while True:
    print "Hello world %s" % (sys.argv)
    sys.stdout.flush()
    sleep(1)

$ sudo cp Python-Sample.py /opt/NoteStartUpRun/bin
$ sudo chown root:root /opt/NoteStartUpRun/bin/Python-Sample.py
$ sudo chmod 755 /opt/NoteStartUpRun/bin/Python-Sample.py 

サービスとして定義している note-startup-1st.service により note-stup-1st.sh が起動されます。その中で単純にサンプルプログラムの Python-Sample.py を起動しています。

作成したユニットファイルやサンプルプログラムの確認

作成したユニットファイルやパッケージ内のプログラムの所有者とアクセス権の確認をしておきます。

$ ls -l /opt/NoteStartUpRun
合計 4
drwxr-xr-x 2 root root 4096  1月  9 15:01 bin
$ ls -l /opt/NoteStartUpRun/bin
合計 8
-rwxr-xr-x 1 root root 175  1月  9 15:01 Python-Sample.py
-rwxr-xr-x 1 root root  77  1月  9 14:54 note-stup-1st.sh
$ ls -l /etc/systemd/system/note-startup-1st.service
-rw-r--r-- 1 root root 276  1月  9 14:41 /etc/systemd/system/note-startup-1st.service

茶色の部分の root ユーザーと 755 及び 644 が確認できました。

サンプルプログラムの単体動作検証

無限ループでメッセージを書き出すサンプルプログラムを単体で起動して、 [Ctrl+C] で強制停止して動作の確認をしておきます。

$ sudo /opt/NoteStartUpRun/bin/Python-Sample.py
Hello world ['/opt/NoteStartUpRun/bin/Python-Sample.py']
Hello world ['/opt/NoteStartUpRun/bin/Python-Sample.py']
Hello world ['/opt/NoteStartUpRun/bin/Python-Sample.py']
Hello world ['/opt/NoteStartUpRun/bin/Python-Sample.py']
Hello world ['/opt/NoteStartUpRun/bin/Python-Sample.py']
^CTraceback (most recent call last):
  File "/opt/NoteStartUpRun/bin/Python-Sample.py", line 8, in
    sleep(1)
KeyboardInterrupt

単体では問題なくメッセージが書き出されるようです。


ユニットファイルを systemd に登録

ここからは、systemd へのサービス(ユニットファイル)の登録と検証作業になるようです。ユニットファイル等を追加や変更した後には、必ず次のコマンド sudo systemctl daemon-reload を実行します。
そして一緒にステータスも確認しておきます。

$ sudo systemctl daemon-reload
$ sudo systemctl status note-startup-1st.service
● note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

ステータスで表示される Loaded: 行のカッコ内の1つ目と2つ目のセミコロンの間の disabled となっているのは、自動起動が無効になっているということのようで、自動起動できるように設定します。

自動起動が行われるように設定

$ sudo systemctl enable note-startup-1st.service
Created symlink from /etc/systemd/system/multi-user.target.wants/note-startup-1st.service to /etc/systemd/system/note-startup-1st.service.
$ sudo systemctl status note-startup-1st.service
● note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

ユニットファイルの定義内に、[ Install ] の WantedBy= で定義しているユニットにリンクが張られ、先ほどの /etc/systemd/system/note-startup-1st.service; の後の disabledenabled に変わっています。
これで再立ち上げで自動実行されるようになっているはずですが、その前にコマンドで起動して確認したり、停止させる操作をして動作を確認します。

systemd の手動起動と停止の確認

ユニットファイル名を指定したコマンド sudo systemctl start note-startup-1st.service で起動できます。

$ sudo systemctl start note-startup-1st.service
$ sudo systemctl status note-startup-1st.service
note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2018-01-09 15:13:41 JST; 12s ago
 Main PID: 7997 (python)
   CGroup: /system.slice/note-startup-1st.service
           └─7997 python /opt/NoteStartUpRun/bin/Python-Sample.py
 1月 09 15:13:44 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:13:45 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:13:46 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:13:47 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S

起動されて1秒毎にメッセージが書きだされているのが確認できます。
次は、sudo systemctl stop note-startup-1st.service コマンドで停止して結果をステータスで確認してみます。

$ sudo systemctl stop note-startup-1st.service
$ sudo systemctl status note-startup-1st.service
note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 火 2018-01-09 15:14:44 JST; 4min 47s ago
  Process: 7997 ExecStart=/opt/NoteStartUpRun/bin/note-stup-1st.sh (code=killed, signal=TERM)
 Main PID: 7997 (code=killed, signal=TERM)
 1月 09 15:14:37 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:38 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:39 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:40 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:41 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:42 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:43 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:44 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:14:44 MITA-NY40S systemd[1]: Stopping Note Private AutoRun...
 1月 09 15:14:44 MITA-NY40S systemd[1]: Stopped Note Private AutoRun.

Active: の行が Active: inactive (dead) になり、プログラムは停止していることが確認できます。

一般ユーザーでジャーナルを確認

次にプログラムの出力ログを確認できる journalctl コマンドがあるとの説明なので試してみます。

$ journalctl -u note-startup-1st.service
-- Logs begin at 月 2018-01-08 19:44:01 JST, end at 火 2018-01-09 15:21:01 JST. --
 1月 09 15:13:41 MITA-NY40S systemd[1]: Started Note Private AutoRun.
 1月 09 15:13:42 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:13:43 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:13:44 MITA-NY40S note-stup-1st.sh[7997]: Hello world ['/opt/NoteStartUpRun/bin/Python-S

システム再起動による自動起動の確認

いよいよ待望の Linux の立上げによる自動起動の確認になります。ノートPCを再起動してステータスを確認します。

$ sudo systemctl status note-startup-1st.service
note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2018-01-09 15:45:33 JST; 3min 15s ago
 Main PID: 1079 (python)
   CGroup: /system.slice/note-startup-1st.service
           └─1079 python /opt/NoteStartUpRun/bin/Python-Sample.py
 1月 09 15:48:38 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:39 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:40 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:41 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:42 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:43 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:44 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:45 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:46 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S
 1月 09 15:48:47 MITA-NY40S note-stup-1st.sh[1079]: Hello world ['/opt/NoteStartUpRun/bin/Python-S

問題なく起動されているようです。

その他の動作確認ツールを学習

今は直接必要がないのですが、参考サイトの説明では、実行時の 標準入力・標準出力・エラー出力 が、どこに繋がっているのか確認できるとのことですので今後のためにも試してみます。
上記出力からプロセスIDは、 1079 (PID: 1079) です。

$ sudo ls -l /proc/1079/fd
合計 0
lr-x------ 1 root root 64  1月  9 15:45 0 -> /dev/null
lrwx------ 1 root root 64  1月  9 15:45 1 -> socket:[21758]
lrwx------ 1 root root 64  1月  9 15:45 2 -> socket:[21758]

標準入力は、ダミーデバイスの /dev/null に割り当てられ、標準出力とエラー出力は共に UNIXドメインソケットに接続されているようです。参考サイトのコマンドもそのまま試してみます。

$ sudo ss -x -p|grep 21758
u_str  ESTAB      0      0       * 21758                 * 20776                 users:(("python",pid=1079,fd=2),("python",pid=1079,fd=1))
u_str  ESTAB      0      0      /run/systemd/journal/stdout 20776                 * 21758                 users:(("systemd-journal",pid=212,fd=38),("systemd",pid=1,fd=74))

知識がないので私には細かいことはわかりませんが、 systemd-journal が以前利用されていた syslogd を置き換えたログシステムとの説明があります。

systemd に関する説明資料

systemd に関しての説明がネット上の RedHat のサイトにありましたのでリンクをしておきます。


本題のシステム起動時のバックアップ

やっと自分で行いたい目的であるシステム立上げ時の自動バックアップ、の一歩手前まで辿りつけました。昔操作していた Windows システムも含めて自分で考えたサービスを追加して自動実行した経験はないので、何か少しワクワクした気持ちになります。

バックアッププログラムの雛形

パイソンのサンプルプログラムを置き換える実際のバックアッププログラムは、シェルスクリプトで記述した単純なもので、 Windows パーティションを一時マウントし、その一部のデータをリモートサーバーの特定のパスに rsync コマンドでコピーするものです。変更があった部分だけがコピーされるのですが、実行時のタイムスタンプを残すように少しだけ細工を追加しています。

$ cat /opt/NoteStartUpRun/bin/sunao-note_Windows-Documents-bkup
#!/bin/bash
server='192.168.x.21'                    # バックアップ先サーバー
bkup_D="$server:/home/bkup/sunao-Win-Doc/"   # バックアップ先 リモートサーバー
mntS='/mnt/ntfs'
bkup_S="$mntS/Users/sunao/Documents/"      # バックアップ元のベース
/bin/mount $mntS
echo "実行タイムスタンプ  `date`" > $bkup_S/TimeStamp.txt
/usr/bin/rsync -av --delete $bkup_S $bkup_D
/bin/umount $mntS

パイソンのサンプルと同じディレクトリにコピーされ、所有者とアクセス権の設定も確認して、単体動作では問題なくバックアップできています。

サンプルからバックアッププログラムへ置き換えと検証

次にユニットファイルを修正して、サンプルからバックアッププログラムに置き換えて、コマンドで実行してステータスを確認してみます。

$ sudo vi /opt/NoteStartUpRun/bin/note-stup-1st.sh
#!/bin/sh
exec /opt/NoteStartUpRun/bin/sunao-note_Windows-Documents-bkup

$ sudo systemctl daemon-reload
$ sudo systemctl start note-startup-1st.service
$ sudo systemctl status note-startup-1st.service
● note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 火 2018-01-09 16:13:53 JST; 26s ago
  Process: 3440 ExecStart=/opt/NoteStartUpRun/bin/note-stup-1st.sh (code=exited, status=0/SUCCESS)
 Main PID: 3440 (code=exited, status=0/SUCCESS)
 1月 09 16:13:51 MITA-NY40S ntfs-3g[3457]: Version 2015.3.14AR.1 integrated FUSE 28
 1月 09 16:13:51 MITA-NY40S ntfs-3g[3457]: Mounted /dev/sda4 (Read-Write, label "Windows", NTFS 3.
 1月 09 16:13:51 MITA-NY40S ntfs-3g[3457]: Cmdline options: rw,noexec,nosuid,nodev,uid=1000,gid=10
 1月 09 16:13:51 MITA-NY40S ntfs-3g[3457]: Mount options: rw,noexec,nosuid,nodev,user,allow_other,
 1月 09 16:13:51 MITA-NY40S ntfs-3g[3457]: Global ownership and permissions enforced, configuratio
 1月 09 16:13:53 MITA-NY40S note-stup-1st.sh[3440]: sending incremental file list
 1月 09 16:13:53 MITA-NY40S note-stup-1st.sh[3440]: TimeStamp.txt
 1月 09 16:13:53 MITA-NY40S note-stup-1st.sh[3440]: sent 3,991 bytes  received 61 bytes  1,620.80
 1月 09 16:13:53 MITA-NY40S note-stup-1st.sh[3440]: total size is 24,092,416  speedup is 5,945.81
 1月 09 16:13:53 MITA-NY40S ntfs-3g[3457]: Unmounting /dev/sda4 (Windows)
lines 1-16/16 (END)

コマンドによる起動では問題なく実行されて、正常終了しています。

実際の立上げによるバックアップの検証作業

本番でのシステム立上げによる実行の動作確認です。
ノートPC再起動後の journalctl コマンドによる結果が次のようになっています。

$ journalctl -u note-startup-1st.service

-- Logs begin at 火 2018-01-09 16:24:34 JST, end at 火 2018-01-09 16:27:17 JST. --
 1月 09 16:25:12 MITA-NY40S systemd[1]: Started Note Private AutoRun.
 1月 09 16:25:14 MITA-NY40S ntfs-3g[1071]: Version 2015.3.14AR.1 integrated FUSE 28
 1月 09 16:25:14 MITA-NY40S ntfs-3g[1071]: Mounted /dev/sda4 (Read-Write, label "Windows", NTFS 3.1)
 1月 09 16:25:14 MITA-NY40S ntfs-3g[1071]: Cmdline options: rw,noexec,nosuid,nodev,uid=1000,gid=1000,user
 1月 09 16:25:14 MITA-NY40S ntfs-3g[1071]: Mount options: rw,noexec,nosuid,nodev,user,allow_other,nonempty,relatime,default_permissi
 1月 09 16:25:14 MITA-NY40S ntfs-3g[1071]: Global ownership and permissions enforced, configuration type 7
 1月 09 16:25:16 MITA-NY40S note-stup-1st.sh[1039]: ssh: connect to host 192.168.x.21 port 22: Network is unreachable
 1月 09 16:25:16 MITA-NY40S note-stup-1st.sh[1039]: rsync: connection unexpectedly closed (0 bytes received so far) [sender]
 1月 09 16:25:16 MITA-NY40S note-stup-1st.sh[1039]: rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]
 1月 09 16:25:16 MITA-NY40S ntfs-3g[1071]: Unmounting /dev/sda4 (Windows)

結果は残念ながらエラーしていてバックアップされない状況です。ユニットファイルの定義の中で、立上げプロセスの実行条件の After= で定義している箇所を色々と変更してみましたが効果がありませんでした。
最初は認証の sshd 等のプロセスが立上がっていないのが原因ではないかとか色々と試行錯誤しましたが、解決には至りませんでした。ネットワーク環境が立上がってから少し安定する時間が必要なのかもしれません。

systemd の依存関係を確認するツール

Systemdのサービスの依存関係を調べる方法 というサイトがありました。ここではグラフ形式にプロットして、ブラウザの Firefox で見る方法が説明されていてとても参考になりました。

最終的にバックアップできるように修正

最終的な修正は、立上げで特に早い段階でバックアップする必要もないので、ユニットファイルの After= に、立上げが一番遅いと思われる multi-user.target を指定して、バックアッププログラムが起動されてから実際のバックアップ動作が開始する前に 5分待つように sleep 300 を追加しました。

$ cat /etc/systemd/system/note-startup-1st.service

[Unit]
Description = Note Private AutoRun
After=network-online.target multi-user.target
ConditionPathExists=/opt/NoteStartUpRun/bin
[Service]
ExecStart=/opt/NoteStartUpRun/bin/note-stup-1st.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target

$ cat /opt/NoteStartUpRun/bin/sunao-note_Windows-Documents-bkup
#!/bin/bash
server='192.168.x.21'                    # バックアップ先サーバー
bkup_D="$server:/home/bkup/sunao-Win-Doc/"  # バックアップ先位置
mntS='/mnt/ntfs'
bkup_S="$mntS/Users/sunao/Documents/"       # バックアップ元のベース
sleep 300           # 安定するように 5分待つ
/bin/mount $mntS
echo "実行タイムスタンプ  `date`" > $bkup_S/TimeStamp.txt
/usr/bin/rsync -av --delete $bkup_S $bkup_D
/bin/umount $mntS

待ち時間を追加する前は毎回エラーしていました。実際には、 sleep 180 の3分でもバックアップ動作は正常に行われていたのですが、余裕を持たせて sleep 300 にしています。

systemd ツールの利用結果

systemd の立上げ時間は、次のコマンドで表示され、 plot を付加して実行するとグラフ形式で svg ファィルを作成できるようで、ブラウザの Firefox で表示した最後の一部のみをここでは取り出しています。

$ systemd-analyze
Startup finished in 3.340s (firmware) + 7.713s (loader) + 6.703s (kernel) + 47.235s (userspace) = 1min 4.992s
$ systemd-analyze plot > startup.svg
$ firefox startup.svg


上記画像の右下角に、下から5番目に multi-user.target が表示され、その下に今回作成したバックアップ処理の note-startup-1st.service の表示がありますので、立上げプロセスの最終で起動されているのが確認できます。
なお立上げプロセスは、systemd-analyze コマンドの実行により、総計で約1分5秒程掛かっていることがわかります。その大半の 47秒を userspace が占めていることがわかります。

完成した立上げでのバックアップ

特に書き換えるデータがなく、実行時のタイムスタンプファイルのみがコピーされているだけの正常なバックアッププロセスを、最後にステータスとジャーナル表示の両方で載せておきます。

$ sudo systemctl status note-startup-1st.service
● note-startup-1st.service - Note Private AutoRun
   Loaded: loaded (/etc/systemd/system/note-startup-1st.service; enabled; vendor preset: enabl
   Active: inactive (dead) since 木 2018-01-11 19:50:00 JST; 11min ago
  Process: 1198 ExecStart=/opt/NoteStartUpRun/bin/note-stup-1st.sh (code=exited, status=0/SUCC
 Main PID: 1198 (code=exited, status=0/SUCCESS)
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Version 2015.3.14AR.1 integrated FUSE 28
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Mounted /dev/sda4 (Read-Write, label "Windows", NTF
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Cmdline options: rw,noexec,nosuid,nodev,uid=1000,gi
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Mount options: rw,noexec,nosuid,nodev,user,allow_ot
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Global ownership and permissions enforced, configur
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: sending incremental file list
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: TimeStamp.txt
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: sent 3,991 bytes  received 61 bytes  1,620
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: total size is 24,092,416  speedup is 5,945
 1月 11 19:50:00 MITA-NY40S ntfs-3g[2846]: Unmounting /dev/sda4 (Windows)
lines 1-16/16 (END)
$ journalctl -u note-startup-1st.service
-- Logs begin at 木 2018-01-11 19:44:14 JST, end at 木 2018-01-11 19:50:53 JST. --
 1月 11 19:44:57 MITA-NY40S systemd[1]: Started Note Private AutoRun.
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Version 2015.3.14AR.1 integrated FUSE 28
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Mounted /dev/sda4 (Read-Write, label "Windows", NTF
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Cmdline options: rw,noexec,nosuid,nodev,uid=1000,gi
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Mount options: rw,noexec,nosuid,nodev,user,allow_ot
 1月 11 19:49:58 MITA-NY40S ntfs-3g[2846]: Global ownership and permissions enforced, configur
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: sending incremental file list
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: TimeStamp.txt
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: sent 3,991 bytes  received 61 bytes  1,620
 1月 11 19:50:00 MITA-NY40S note-stup-1st.sh[1198]: total size is 24,092,416  speedup is 5,945
 1月 11 19:50:00 MITA-NY40S ntfs-3g[2846]: Unmounting /dev/sda4 (Windows)
lines 1-12/12 (END)