我在使用 plesk 时遇到了一个奇怪的问题,但在官方支持中似乎找不到答案,所以我希望这里有人可以提供一些帮助。
我只是想通过 cron 使用用户控制面板中的“计划任务”运行脚本。命令设置为:php /var/www/full/path/to/script并且它在命令行上运行。
当它通过 cron 运行时我收到的错误消息(现在我升级到 plesk 11)是:
在 chrooted passwd 文件系统中未找到 id=xxxxx 和 name=xxxxxxxx 的用户,错误:没有这样的文件或目录
显然,xxxxxx 是真实的 ID 和名称。该用户列在 /etc/passwd 文件中,看起来与其他用户没有任何不同。
我有另一个域执行类似操作,每小时使用相同命令(但使用不同的脚本)运行一次 cron 作业。该脚本运行良好,它们使用相同的托管设置等,并且功能应该相同。
有谁知道该怎么做才能“修复”用户?
编辑:
因此我在服务器上查看时发现了这一点:/usr/local.psa/admin/sbin/crontabmng
如果我使用 crontabmng 以正在运行的 crontab 用户身份登录,我会在文件顶部看到以下内容外壳=/bin/sh- 而对于不工作的用户,我看到SHELL=/usr/local/psa/bin/chrootsh
看起来尽管这两个用户应该是相同的(我猜他们可能在升级后在不同版本的 plesk 中设置,但据我所知,他们是使用相同的过程设置的) - 其中一个有 chrooted shell,而另一个没有。
现在我只需要知道如何改变该设置.....
答案1
我找到了一个答案,即使它有点“不雅”,并且可能无法首先解决问题的根本原因。
然而,它可能会阻止更多的人拔掉头发。
解决方案是编辑用户的 crontab 文件并更改该 SHELL 变量,但是,我不知道用户的 crontabl 文件在哪里。
所以我使用了这些步骤。
- /usr/local/psa/admin/sbin/crontabmng 获取 [用户] > cron.txt
- 日志文件
- (编辑 cron.txt 并将 SHELL 变量更改为 /bin/sh)
- /usr/local/psa/admin/sbin/crontabmng 设置 [用户] cron.txt
本质上,这会将该用户的 crontab 转储到当前目录中的 cron.txt 文件中 - 您可以在该文件中编辑它,并使用它来重新加载回 crontab 管理器。将“cron.txt”替换为您放置该文件的完整路径....
编辑:
现在我找到了一个更持久的解决方案,如果您不想在 chrooted shell 中执行任何 cron 作业,请运行以下命令:
/usr/local/psa/bin/server_pref -u -crontab-secure-shell /bin/sh
阅读更多内容这里(当您知道您在谷歌搜索什么时,解决方案会更容易找到!)