Bash 如何在关机和重新启动时执行openssl命令?

Bash 如何在关机和重新启动时执行openssl命令?,bash,systemd,shutdown,autorun,power-off,Bash,Systemd,Shutdown,Autorun,Power Off,我想加密文件并记录关机或重新启动时的时间。 这就是我所做的。 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] Descript

我想加密文件并记录关机或重新启动时的时间。
这就是我所做的。
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启用日志服务
4.重新启动

重新启动后,我发现/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命令

Before=
记录在
man-systemd.unit
中。它不适用于这个用例。还记录了
WantedBy=
RequiredBy=
。后者听起来像是这里所需要的,但是您的日志记录失败,它可能会阻止关机
WantedBy=
在关机失败时不会阻止关机。读一读这两本书,看看哪一本更适合你的情况

我建议使用如下文件结构:

```

```

您的
安装
块将服务设置为在启动时启动,这不是您想要的。当您使用
systemctl enable log.service
启用服务时,新语法将该服务设置为在关机时处于活动状态


我还没有用systemd测试过这种关机运行的方法。让我们知道它是如何工作的

问题在于,
${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
解决方案1: 在
log.sh中使用绝对路径

解决方案2: 在日志服务的服务部分添加
User=
。在这种情况下,请确保用户有权写入您要写入的不同位置。有关参考信息,请参见

$USER、$LOGNAME、$HOME、$SHELL

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


尝试检查发生了什么,尝试捕获openssl输出,例如,
openssl enc-des3-a-salt-in$HOME/test-k${key}-out$HOME/test.asc>/HOME/log.info 2>&1
命令的
openssl enc-des3-a-salt-in$HOME/test-k${key}-out$HOME/test.asc>/HOME/log.info 2>&1
,1.测试已加密到test.asc2.在/home/log.info中没有任何内容
openssl enc -des3 -a -salt -in $HOME/test -k ${key} -out $HOME/test.asc 2> /home/log.error