![当我退出时,Cron 无法访问我的主目录](https://linux22.com/image/59872/%E5%BD%93%E6%88%91%E9%80%80%E5%87%BA%E6%97%B6%EF%BC%8CCron%20%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%88%91%E7%9A%84%E4%B8%BB%E7%9B%AE%E5%BD%95.png)
我在使用 cron 时遇到了一个很奇怪的问题。到目前为止我已经将其提炼出来:
我在以下位置创建了以下简单的 bash 脚本/home/user1/cron_dir/cron.sh
:
#!/bin/bash
echo "Success"
作为 user1,我创建了以下 crontab:
*/1 * * * * sh /home/user1/cron_dir/cron.sh
这将按预期安装并运行(在我的本地邮件中从 cron 获取“成功”消息)。但是,如果我从 user1 帐户注销,等待几分钟执行 cron 作业,重新登录并检查我的本地邮件,我会得到:
sh: 0: Can't open /home/user1/cron_dir/cron.sh
编辑:感谢 garethTheRed 我意识到了问题:我的主目录已加密。当然,只有当我登录时才能访问该目录。
答案1
回答这个问题是因为仅仅编辑你的问题以将答案内嵌是一种不好的形式(实际上,只回答你自己的问题,如果真诚地这样做就可以)。
我遇到了类似的问题 - 通过 cron 启动的作业前几次似乎可以工作,但后来失败了。这些症状都可以追溯到无法访问用户的主目录及其中的文件。相同的脚本和设置在以前的 Ubuntu 机器上运行得很好。
答案是肯定的,如果你在 Ubuntu 安装过程中选择了对 $HOME 目录进行加密,你会发现 cron 作业将无法访问其下的文件,除非你碰巧手动登录到机器上导致文件被删除。系统要解密并保持安装。我同意了这个选项,因为这听起来是个好主意,但我并没有坚定地接受它。
我要采用的解决方案是不加密我的主目录;这意味着我必须从中删除加密。看起来这是一个小心的过程,将所有相关内容从文件夹中移出,卸载它,然后将它们全部移回 - 这并不令人愉快。
我为此遵循的基本流程如下。注意:在执行之前要非常小心并阅读所有步骤,尤其是最后一个,因为我怀疑一旦卸载 ecryptfs,恢复旧的加密主文件夹将非常困难。如果您不确定自己在做什么,请不要尝试此操作,因为数据丢失的风险非常真实。我只是继续前进,因为我知道我有备份并且可以轻松地重新安装。
fixer
使用添加新用户adduser
(因为您需要以其他人的身份登录才能移动您的主目录),并授予他们 sudo 权限- 使用 sudo 创建一个新文件夹
sudo mkdir /home/chrisc.unencrypted
以将主目录的内容传输到 - 使用 . 将我的主目录的内容复制到新的未加密文件夹中
rsync -aP /home/chrisc /home/chrisc.unencrypted
。确保所有隐藏文件也已移动(例如 .bash_profile 等) - 删除 /home/chrisc.unencrypted/.ecryptfs 文件夹
- 注销(并可能重新启动,因为您需要卸载加密的 /home/chrisc 文件夹)
- 再次登录
fixer
- 使用
sudo su
root 身份运行 - 检查内容
/home/chrisc.unencrypted
是否与应有的相符。这非常重要,因为接下来的几个步骤将使您无法查看原始主文件夹 - 使用 重命名旧的(加密的)主目录
mv /home/chrisc /home/chrisc.old
。您可能会发现需要先重新启动,以确保没有任何内容正在使用该文件夹(否则您将收到一条设备正在使用消息,阻止重命名)。 - 将未加密的主文件夹重命名为用户的默认文件夹
mv /home/chrisc.unencrypted /home/chrisc
- 使用卸载 ecryptfs 工具
apt-get remove ecryptfs-utils libecryptfs0
。如果我不这样做,然后以 chrisc 身份登录,我会看到一个空的主目录(就好像它仍在挂载加密的主目录并隐藏我实际的未加密的主目录)。我必须重新启动才能将其卸载并且真正未加密的 /home/chrisc 才能可见。 - 以原来的用户身份再次登录并检查
可能可以删除 ecryptfs 的配置文件夹,或者有一个每用户配置,其中写着“当您以 chrisc 身份登录时,挂载 /home/chrisc/.Private 上可用的 ecryptfs 卷”如果您可以切断它链接,那么您可能不需要卸载 ecryptfs。
如果您的新主文件夹看起来不包含正确的内容,您应该能够通过反转移动来恢复加密的主文件夹 - 再次制作chrisc.old
,chrisc
以及未加密的主文件夹chrisc.unencrypted
。但这只会在您卸载 ecryptfs 之前有效。