【问题标题】:Script executed by a systemd service not deleting the service filesystemd 服务执行的脚本不删除服务文件
【发布时间】:2021-11-24 09:18:44
【问题描述】:

我正在尝试创建一个systemd 服务,该服务在重新启动时执行一个 shell 脚本,这个脚本将删除一些文件,删除该服务,然后删除它自己。但是当我启用该服务时,它运行脚本,文件被删除,但在删除服务时失败。我的脚本是:

rm /var/local/myvars/file
systemctl stop myservice.service
systemctl disable myservice.service
rm /etc/systemd/system/myservice.service
systemctl daemon-reload
systemctl reset-failed
rm /var/tmp/myscript

myservice.service 是:

[Unit]
Description = Run script on Reboot
Before = 
[Service]
Type=oneshot
ExecStart=/var/tmp/myscript
RemainAfterExit=no
[Install]
WantedBy=multi-user.target

我做错了什么?我想要做的是在重启后删除某些文件,因此我想要一种在重启后只运行一次脚本的方法。这是正确的方法还是有其他更好的方法?

【问题讨论】:

    标签: linux systemd


    【解决方案1】:

    我建议您不要将其作为服务。相反,您可以创建一个 cron 作业以在每次重新启动时执行脚本。

    你可以的

    sudo crontab -e #to open it as root
    

    然后在下面添加一行:

    @reboot /bin/bash /path_to_your_script.
    

    然后保存并关闭文件并输入

    systemctl restart cron
    

    【讨论】:

    • 我想到了cronjob,但我也想让另一个服务等待这个服务。在 systemd 中,我可以使用 [Unit] 中的 Before 参数来做到这一点,但在 cronjob 中没有这样的事情
    • 好吧,我可以指导你一些 desi jugaad 方法。就像您可以在执行 cronjob 时创建 xyz 文件一样。在服务上,您可以提及在创建 xyz 文件之前不应运行服务。
    【解决方案2】:

    以下服务和脚本对我有用。 服务:

    [Unit]
    Description = Run script on Reboot
    Before = 
    [Service]
    Type=simple
    ExecStart=/var/tmp/myscript
    [Install]
    WantedBy=multi-user.target
    

    脚本:

    rm -rf files
    systemctl disable myservice.service
    rm -f /etc/systemd/system/myservice.service
    rm -f /var/tmp/myscript
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2017-08-01
      • 2017-04-03
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多