設定
簡単なスクリプトがあります:script.sh
#!/bin/bash
while true;do
echo "$(date)"
sleep 3
done
systemdのサービスユニットに含めて引き続き実行したいと思います。だから私は単純な単位ファイルを作成しました。
[Unit]
Description=test
[Service]
ExecStart=/bin/bash /home/user/p/test/system/script.sh
[Install]
WantedBy=multi-user.target
次に、/ etc / systemd / systemにあるユニットファイルへのシンボリックリンクを作成し、一意の名前を付けます。
ln -s $(readlink -f ./unit) /etc/systemd/system/superspecial.service
これでサービスを開始できます。
systemctl start superspecial
効果があるもちろん、エコーは見えませんが、見ることはできません。
systemctl status superspecial
質問
私の問題は、サービスが起動時に起動するように「アクティブ化」しようとすると、不明なエラーメッセージが表示され、検索に失敗することです。
€ systemctl enable superspecial.service
Failed to look up unit file state: Invalid argument
何が主張?ユニットファイルの状態はどうですか?私のユニットファイルに何かがありましたか?私のシステムに関するいくつかの情報:
€ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
€ systemctl --version
systemd 245 (245.4-4ubuntu3.16)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
実行中のサービスに関するいくつかの情報:
€ systemctl status superspecial
● superspecial.service - test
Loaded: loaded (/etc/systemd/system/superspecial.service; bad; vendor preset: enabled)
Active: active (running) since Wed 2022-04-27 15:58:01 CEST; 14min ago
Main PID: 13111 (bash)
Tasks: 2 (limit: 9282)
Memory: 540.0K
CGroup: /system.slice/superspecial.service
├─13111 /bin/bash /home/user/p/test/system/script.sh
└─20421 sleep 3
Apr 27 16:11:45 hostname bash[13111]: Mi 27. Apr 16:11:45 CEST 2022
Apr 27 16:11:48 hostname bash[13111]: Mi 27. Apr 16:11:48 CEST 2022
Apr 27 16:11:51 hostname bash[13111]: Mi 27. Apr 16:11:51 CEST 2022
Apr 27 16:11:54 hostname bash[13111]: Mi 27. Apr 16:11:54 CEST 2022
Apr 27 16:11:57 hostname bash[13111]: Mi 27. Apr 16:11:57 CEST 2022
もちろん、root権限で実行し、サービスを再起動して再起動することを繰り返し試しました。おそらく、これがsystemctlの「悪い」状態に関連しているのでしょうか?
答え1
私の場合は、コマンドを試しました。
sudo ln -s /home/username/myproject/config/systemd.conf /etc/systemd/system/myproject.service
同じ問題が発生しました。その後、次のコマンドを試しました。
sudo ln -f /home/username/myproject/config/systemd.conf /etc/systemd/system/myproject.service
-f
代わりに使用します-s
。
答え2
ありがとうございます。あなたは正しいです。シンボリックリンクの代わりにハードリンクを使用して問題を解決しました。
readlink -f
ファイルエントリへの絶対パスが必要な場合は、これが私が使用するパスです。