以前のすべての編集をマージすることで質問を非常に単純化しました
lsyncd構成ファイル/etc/lsyncd/lsyncd.conf.lua
settings {
logfile = "/media/blueray/WDRed/_LsyncLog/lsyncd.log",
statusFile = "/media/blueray/WDRed/_LsyncLog/lsyncd-status.log",
pidfile="/media/blueray/WDRed/_LsyncLog/lsyncd.pid",
statusInterval = 5,
nodaemon = false,
}
sync {
default.rsync,
source = "/media/blueray/Data/",
target = "/media/blueray/WDRed/_LsyncBackup/",
delay = 0,
exclude = { "/_RedoBackup" },
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
_extra = { "--backup-dir=/media/blueray/WDRed/_LsyncDeletedBackup/" },
}
}
lsyncdサービスファイル/home/blueray/.config/systemd/user/lsyncd.service
[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target remote-fs.target media-blueray-Data.mount media-blueray-WDRed.mount
Wants=media-blueray-Data.mount media-blueray-WDRed.mount
Requires=media-blueray-Data.mount media-blueray-WDRed.mount
[Service]
Type=forking
ExecStart=/usr/bin/lsyncd /etc/lsyncd/lsyncd.conf.lua
PIDFile=/media/blueray/WDRed/_LsyncLog/lsyncd.pid
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
再起動前
blueray@blueray-i58600K:~$ systemctl --user start lsyncd
blueray@blueray-i58600K:~$ systemctl --user enable lsyncd
blueray@blueray-i58600K:~$ systemctl --user status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/home/blueray/.config/systemd/user/lsyncd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-29 11:58:22 +06; 11s ago
Main PID: 1921 (lsyncd)
CGroup: /user.slice/user-1000.slice/[email protected]/lsyncd.service
└─1921 /usr/bin/lsyncd /etc/lsyncd/lsyncd.conf.lua
Oct 29 11:58:22 blueray-i58600K systemd[916]: Starting Live Syncing (Mirror) Daemon...
Oct 29 11:58:22 blueray-i58600K systemd[916]: Started Live Syncing (Mirror) Daemon.
blueray@blueray-i58600K:~$
再起動後
blueray@blueray-i58600K:~$ systemctl --user status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/home/blueray/.config/systemd/user/lsyncd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
blueray@blueray-i58600K:~$
ご覧のように、コマンドsystemctl --user start lsyncd
を与えると、このサービスはうまく機能しています。
コマンドsystemctl --user enable lsyncd
を指定したのに、なぜ自動起動しないのですか。再起動後にActive: inactive (dead)
と表示されるのはなぜですか?
Systemdはbeforeおよびafterと混同する可能性がありますが、私は変更します:
After=network.target remote-fs.target media-blueray-Data.mount media-blueray-WDRed.mount
に:
After=network.target remote-fs.target media-blueray-Data.mount media-blueray-WDRed.mount network.target multi-user.target
これに基づいて answer 。
でlsyncd構成ファイルを作成します(他の場所にも配置できます)/home/blueray/.config/lsyncd.conf.lua
settings {
logfile = "/media/blueray/WDRed/_LsyncLog/lsyncd.log",
statusFile = "/media/blueray/WDRed/_LsyncLog/lsyncd-status.log",
pidfile="/home/blueray/.config/lsyncd.pid",
statusInterval = 5,
nodaemon = false,
}
sync {
default.rsync,
source = "/media/blueray/Data/",
target = "/media/blueray/WDRed/_LsyncBackup/",
delay = 0,
exclude = { "/_RedoBackup" },
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
_extra = { "--backup-dir=/media/blueray/WDRed/_LsyncDeletedBackup/" },
}
}
/home/blueray/.config/systemd/user/lsyncd.service
にlsyncdサービスファイルを作成します
[Unit]
Description=Live Syncing (Mirror) Daemon
Requires=default.target
After=default.target
[Service]
Type=forking
ExecStart=/usr/bin/lsyncd /home/blueray/.config/lsyncd.conf.lua
PIDFile=/home/ismail/.config/lsyncd.pid
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
デバッグステップの動機:
この種の問題はインターネットを苦しめているため、
https://superuser.com/questions/955922/enabled-systemd-unit-does-not-start-at-boot
https://unix.stackexchange.com/questions/237795/lsyncd-wont-start-at-startup
https://unix.stackexchange.com/questions/374638/why-x0vncserver-is-not-starting-at-boot?rq=1
https://unix.stackexchange.com/questions/98033/service-not-starting-at-boot
https://unix.stackexchange.com/questions/282174/squid-systemd-service-not-run-at-boot
https://unix.stackexchange.com/questions/255788/what-is-wrong-with-my-systemd-unit-file
https://unix.stackexchange.com/questions/137028/why-is-my-systemd-unit-loaded-but-inactive-dead
https://unix.stackexchange.com/questions/376038/systemd-why-is-this-service-inactive-dead/37604
https://unix.stackexchange.com/questions/376038/systemd-why-is-this-service-inactive-dead
https://unix.stackexchange.com/questions/251211/why-doesnt-my-systemd-user-unit-start-at-boot
などなど。
また、問題の解決に役立つデバッグ手順を追加したいと思います。
デバッグステップ:
ステップ1は、シンプルにすることです。
後にmedia-blueray-Data.mount
、media-blueray-WDRed.mount
などを追加
After=, Wants=, Requires=
などが複雑になりました。
ユーザーサービスの場合は、systemctl --user list-dependencies
および/またはsystemd-analyze --user critical-chain
を使用して、WantedBy=
セクションの下に[Install]
として何を配置するかを判断します-
注:サービスをenable
(起動時に実行)する場合は、[Install]
セクションが必要です。
$ systemctl --user list-dependencies
default.target
● └─basic.target
● ├─paths.target
● ├─sockets.target
● │ ├─dirmngr.socket
● │ ├─gpg-agent-browser.socket
● │ ├─gpg-agent-extra.socket
● │ ├─gpg-agent-ssh.socket
● │ └─gpg-agent.socket
● └─timers.target
$ systemd-analyze --user critical-chain
default.target @12ms
└─basic.target @12ms
└─paths.target @12ms
必要に応じて、Requires=
セクションの下のAfter=
および[Unit]
で選択したターゲットを使用できます。
systemctl --user enable lsyncd
を使用してサービスを有効にします
コンピュートを再起動した後、サービスが実行されていない場合。 systemctl --user status lsyncd
を使用してサービスのステータスを確認します
lsyncd Start request repeated too quickly.
のようなエラーを見つけた場合
RestartSec=
の下で[Service]
を使用します
秒単位の単位なしの値、または「5min 20s」などのタイムスパン値を取ります。デフォルトは100ミリ秒です。
次のようなものも使用できます
StartLimitInterval=10
StartLimitBurst=1
この問題に対処します。
ユニットファイルの変更後
$ systemctl --user daemon-reload
// Disabling before enabling helped me. But I do not think it is necessary.
// $ systemctl --user disable lsyncd
$ systemctl --user enable lsyncd
PS:これは簡単なデバッグガイドでした。これに関する多くのインターネット上の記事があります。私の作業は完了していません(ログを読み取るためのさまざまな属性を持つjournalctl
を支援するコマンドがさらに12個あります)。しかし、多くの初心者がsystemdを使用するのに役立つことを願っています。