0

我想加密文件并在关机或重启时记录时间。
这就是我所做的。
1.编辑 bash 脚本文件以在关机或重启时执行。

vim log.sh
key="123456"
openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc
date >>  /home/log.info

2.编辑日志服务

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启用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 命令在关机和重启时执行?

4

2 回答 2

1

问题是它${HOME}并没有扩展到你所期望的。当我在我的系统上尝试它时,它会扩展为空。就这样${HOME}/test变成了/test。您可以通过重定向您的 openssl 命令的错误输出来检查这一点log.sh

openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc 2> /home/log.error

解决方案1:

使用绝对路径log.sh

解决方案2:

添加User=在服务部分log.service。在这种情况下,请确保用户有权写入您要写入的不同位置。有关参考,请参阅systemd.exec

$USER、$LOGNAME、$HOME、$SHELL

用户名(两次)、主目录和登录 shell。为设置了 User= 的单元设置变量,其中包括用户 systemd 实例

于 2018-03-28T14:40:11.267 回答
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 测试过这种在关机时运行的方法。让我们知道它是如何工作的!

于 2018-03-26T18:18:24.747 回答