cron 作业导致 systemd 错误

cron 作业导致 systemd 错误

我希望有人能在这里给我指明正确的方向,我在 cron 中以 root 身份运行一个脚本,但我的日志文件表明它正在触发以下错误。

有什么办法可以解决这个问题吗?也许这只是一件不需要注意的事情

debian systemd[4840]: Failed to open directory /home/user/.config/systemd/user/run-user-0.mount.wants: Permission denied
debian systemd[4840]: Failed to open directory /home/user/.config/systemd/user/run-user-0.mount.requires: Permission denied
debian systemd[4840]: Failed to open directory /home/user/.local/share/systemd/user/run-user-0.mount.wants: Permission denied
debian systemd[4840]: Failed to open directory /home/user/.local/share/systemd/user/run-user-0.mount.requires: Permission denied

我的 cronjob 条目也如下;

0 */1 *. *. *. su root -c "/etc/myscript/mysript.sh" >  /dev/null 2>&1

该脚本在通过 sudo 运行时不会导致错误,仅作为 cronjob。

答案1

我认为 su 无法切换到 root,这就是为什么会出现“权限被拒绝”的情况。通过发出以下命令来检查

su root -c "/etc/myscript/mysript.sh"

从命令提示符。

尝试

0 */1 *. *. *. sudo /etc/myscript/mysript.sh >  /dev/null 2>&1

而是在你的 crontab 文件中

答案2

首先,如果你想以 root 身份运行 cronjob,难道不应该将条目放入 root 用户本身的 cronjob 中吗?然后su编辑 cronjob 并将条目放在那里(无需 su)

0 */1 *. *. *. /etc/myscript/mysript.sh >  /dev/null 2>&1

除此之外,我想指出如何调试 cronjobs,因为大多数人都不知道,问题就从那里开始。cron 环境是一个受限环境,它不知道用户知道的所有系统变量等。因此,这经常会导致问题。

因此,要调试 cronjob,您需要从实际的 cron 环境进行调试。

为此,首先将其放入您的 crontab 中:

* * * * * env > ~/cronenv

这会每分钟将 crontab 的环境变量导出到cronenv主目录中的文件中。因此,请等待一分钟,然后从 crontab 中删除此语句。

现在您可以将用户切换到 cron 环境:

env - `cat ~/cronenv` /bin/sh

现在你可以调试你的 cron 语句并观察会发生什么:

su root -c "/etc/myscript/mysript.sh"

我预计你会收到相同的错误消息,但现在调试和修复它更容易了。祝你好运!

哦,您可以随时通过简单地输入来退出 cron 环境exit

相关内容