当前位置:  开发笔记 > 编程语言 > 正文

"getpwnam()失败"只在从cron调用时才在/ bin/sh中

如何解决《"getpwnam()失败"只在从cron调用时才在/bin/sh中》经验,为你挑选了1个好方法。

这是我的crontab文件的内容:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="example@example.com"

*/5 * * * * sh /robot/1/master.sh >/dev/null 2>&1
*/5 * * * * sh /robot/2/master.sh >/dev/null 2>&1
*/5 * * * * sh /robot/3/master.sh
*/5 * * * * sh /robot/4/master.sh >/dev/null 2>&1
*/5 * * * * sh /robot/5/master.sh >/dev/null 2>&1

这是在/var/log/cron尝试运行时不断显示的错误:

crond[669]: (sh) ERROR (getpwnam() failed)

如果我手动运行任何这些文件,它们的工作没有任何问题.

crontab文件有什么问题?



1> hetOrakel..:

让我感到惊讶的是,没有人能够正确回答这个问题.今天我面临完全相同的问题,谷歌没有帮助.

2小时后,我发现在/etc/cron.d中放置文件时,计划行必须包含一个额外的选项.....

我总是把它用于我的crontab -e

# Minute   Hour Day of Month     Month          Day of Week     Command    
# (0-59)  (0-23)   (1-31)  (1-12 or Jan-Dec)  (0-6 or Sun-Sat)  /my/fancy/script.sh            

所以它包含6个项目.

将它放在/etc/cron.d中的文件中时,cron需要一个额外的选项,即运行你的花哨/脚本的用户.

# Minute   Hour Day of Month     Month          Day of Week     Who   Command    
# (0-59)  (0-23)   (1-31)  (1-12 or Jan-Dec)  (0-6 or Sun-Sat)  root  /my/fancy/script.sh            

这在man crontab(5)中有记载.例如https://linux.die.net/man/5/crontab.它说:

工作在/etc/cron.d/

cron.d中的作业是系统作业,通常用于多个用户.这就是为什么需要用户名称的原因.第一行的MAILTO是可选的.


嘿.好点 - 如果你有一个缺少字段的系统crontab,我们将寻找一个名为`sh`的用户,这肯定会导致`getpwnam()`失败.
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有