我有一个服务想要在计算机启动后立即运行。
我遵循的步骤如下:
创建简历
- 在 /usr/lib/systemd/system 中创建 cv-init.service
- 按照如下所示格式化文件
- sudo systemctl 守护进程重新加载
- sudo systemctl 启动 cv-init.service
- sudo systemctl 启用 cv-init.service
当我第一次运行启用命令时,我收到以下响应:
Created symlink /etc/systemd/system/multi-user.target.wants/cv-init.service -> /usr/lib/systemd/system/cv-init.service
如果我再次运行启用命令,则不会得到任何响应,我必须先删除 multi-user-target-wants 中的符号链接,然后它才会再次显示。
正如我从遇到问题的人们那里读到的许多其他案例一样,如果我手动执行该服务,它会起作用,尽管启用成功,但当我重新启动计算机时,它不会执行。
这是我的服务文件:
[Unit]
Description=Initialize CV
[Service]
Type=oneshot
WorkingDirectory=/app/configuration/cv_init
ExecStart=/app/configuration/cv_init/startup_cv.sh
[Install]
WantedBy=multi-user.target
我认为有必要指出的是,startup_cv.sh 不是一个使守护进程保持活动状态的脚本,它只是运行一些读取日志并采取其他操作的命令,如果我手动运行 .sh 文件,它会按预期工作,但我似乎无法让它在启动时自动运行。
我也尝试了很多方法,这些方法似乎对那些问这种问题的人有用,比如将我的服务放在 /etc/init.d 或 /etc/systemd/system 中,还在我的服务上指定 WANTS 和诸如此类的东西,但它仍然不起作用,有人可以帮我吗?
答案1
所以我发现了问题,我的 /app/configuration/cv_init/startup_cv.sh 执行了一个 docker 命令,而我的服务在 docker 准备好之前就试图执行。我刚刚添加了所需的依赖项,它就可以完美运行。