我想加密文件并记录关机或重启的时间 这就是我的所作所为 1.编辑一个bash脚本文件,在shutdown或reboot时执行。
vim log.sh
key="123456"
openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc
date >> /home/log.info
2.edit log.service
sudo vim /etc/systemd/system/log.service
[Unit]
Description=Run command at shutdown
Before=shutdown.target reboot.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/log.sh
[Install]
WantedBy=multi-user.target
3.systemctl enable log.service
4.reboot
重启后我发现/home/log.info中有日期信息,表示date >> /home/log.info
已执行,没有$HOME/test.asc
,表示openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc
未执行。
命令可以在终端中成功运行。
key="123456"
openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc
如何修复我的log.service文件/etc/systemd/system/log.service
以在关机和重启时执行openssl命令?
答案 0 :(得分:1)
问题是${HOME}
没有扩展到您的期望。当我在我的系统上尝试时,它会扩展为空。因此${HOME}/test
变为/test
。您可以通过在log.sh
中重定向openssl命令的错误输出来检查这一点:
openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc 2> /home/log.error
在log.sh
在User=
的服务部分添加log.service
。在这种情况下,请确保用户有权写入要写入的不同位置。有关参考,请参阅systemd.exec
$ USER,$ LOGNAME,$ HOME,$ SHELL
用户名(两次),主目录和登录shell。为具有User = set的单元设置变量,其中包括用户systemd实例
答案 1 :(得分:0)
Before=
记录在man systemd.unit
中。它不适用于此用例。还记录了WantedBy=
和RequiredBy=
。后者听起来像这里所期望的那样,但是你的日志记录失败了,它可能会阻止关机。 WantedBy=
如果失败则不会阻止关机。阅读他们两个,看看哪一个更适合你的情况。
我建议使用这样的文件结构:
```
[Unit]
Description=Run command at shutdown
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/log.sh
[Install]
WantedBy=shutdown.target reboot.target
```
您的Install
阻止了将服务设置为在启动时启动,这不是您想要的。当您使用systemctl enable log.service
启用服务时,新语法会将服务设置为在关闭时处于活动状态。
我还没有使用systemd测试这种run-at-shutdown方法。让我们知道它是如何工作的!