设置
我有一个简单的脚本:script.sh
#!/bin/bash
while true;do
echo "$(date)"
sleep 3
done
我想通过将其包含在 systemd 的服务单元中来保持它的运行。所以我创建了一个简单的单元文件:unit
[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
如果我想要文件条目的绝对路径,这正是我所使用的。