令人沮丧的问题是 cron 和 su -c 都不运行我的工作(权限?)

令人沮丧的问题是 cron 和 su -c 都不运行我的工作(权限?)

更新(和剪断了),更多详细信息如下。

我已经设置了一个 cron 脚本,我正在尝试调试它没有运行的原因。[剪掉上下文测试,这一切都可以;参见修订版 2详情]命令本身(如果有帮助的话)(箭头表示换行以便于阅读)是:

/usr/bin/php -C /etc /path/to/process.php
↪  >>/path/to/stdout.log 2>>/path/to/stderr.log

[权限测试被剪掉,没问题;见下文和修订版2详情]

检查crontab(再次,为了易读而包装),我得到:

[blackero@XXXXXXXXXXX to]$ sudo crontab -u cronuser -l
MAIL="blackero@localhost"

30 9 * * * cronuser /usr/bin/php -C /etc /path/to/process.php
↪   >>/path/to/stdout.log 2>>/path/to/stderr.log
20 18 7 * * cronuser /usr/bin/php -C /etc /path/to/process.php
↪   >>/path/to/stdout.log 2>>/path/to/stderr.log
22 18 7 * * cronuser echo "Test" > /path/to/test.txt
↪   2> /path/to/error.txt

更新#1于 2012-02-08 12:32 Z

[截图:已经尝试过德罗伯特建议修订版3)],我知道可以cronuser正确运行脚本并且可以写入这两个.log文件。 (该脚本所做的第一件事process.php就是通过 FTP 下载文件;它也成功地做到了这一点。)但是,即使在修复该MAIL=""行之后(通过删除它并将其更改为MAILTO="blackero@localhost"),cron 任务仍然不会运行,也不给我发送任何电子邮件。

一位朋友建议我重试

 9 12 8 * * cronuser /bin/echo "Test" > /var/www/eDialog/test.txt
 ↪  2> /var/www/eDialog/error.txt

任务,将完整路径传递给/bin/echo.刚刚尝试过,它也不起作用,也没有生成电子邮件,所以我不知所措。

更新#2发表于 2012-02-08 19:15 Z

非常有用的聊天对话奥赫斯林,看来问题出在pam。每次cron尝试运行我的工作时,我都会有/var/log/cron以下条目:

crond[29522]: Authentication service cannot retrieve authentication info
crond[29522]: CRON (cronuser) ERROR: failed to open PAM security session: Success
crond[29522]: CRON (cronuser) ERROR: cannot set security context

我通过添加以下行来解决这个问题/etc/shadow

cronuser:*:15217:0:99999:7:::

正如我发现的在论坛上,如果用户没有出现在 中/etc/shadow,则pam不会继续处理安全请求。添加*为第二列意味着该用户无法使用密码登录(因为未指定哈希值)。修复该问题会导致 中出现不同的错误/var/log/cron,因此,仔细检查我crontab发现我每次都指定了用户名。

更正这意味着我crontab现在读的是:

[blackero@XXXXXXXXXXX ~]$ sudo crontab -u cronuser -l
MAILTO="blackero@localhost"

30 9 * * * /usr/bin/php -C /etc /path/to/process.php
↪   >>/path/to/stdout.log 2>>/path/to/stderr.log
52 18 8 * * /usr/bin/php -C /etc /path/to/process.php
↪   >>/path/to/stdout.log 2>>/path/to/stderr.log
9 12 8 * * /bin/echo "Test" > /path/to/test.txt
↪   2> /path/to/error.txt

但现在/var/log/cron向我展示:

Feb  8 18:52:01 XXXXXXXXXXX crond[16279]: (cronuser) CMD (/usr/bin/php -C /etc
↪   /path/to/process.php >>/path/to/stdout.log 2>>/path/to/stderr.log)

并且没有任何内容进入stdout.logstderr.log。没有邮件发送给我,并且其他文件中/var/log/没有任何条目在正确的时间范围内,并且我已经没有想法去哪里查看出了什么问题

答案1

首先,当 cron 作业失败时,cron 会发送电子邮件。默认情况下,这是 cron 作业的所有者。因此,这些电子邮件可能会发送到 cronuser@localhost 或 root@localhost。检查那些电子邮箱。或者,您可以通过将其放在MAILTO=email@domaincrontab 文件的顶部来指定邮件的发送位置。 (实际上,我看到你把它放在MAIL=""crontab 的顶部。至少根据man 5 crontab我的机器,它应该是MAILTO。而你当试图找出它不起作用的原因时想扔掉错误消息!)

其次,cron 使用/bin/sh.如果需要 bash 扩展,请设置SHELL=/bin/bash(再次在 crontab 顶部)。

第三,您还没有完全测试权限。你需要做类似的事情:

# su -s /bin/sh -u cronuser
$ touch /path/to/stdout.log
$ touch /path/to/stderr.log
$ cat /path/to/process.php > /dev/null
$ exit

全面检查权限。cronuser例如,父目录中可能缺少 +x。 (我想你也应该检查 /usr/bin/php ,但我认为这是正常的)

您还可以尝试在最小环境中运行该命令:

# su -s /bin/sh -u cronuser
$ env - /bin/sh
$ /usr/bin/php -C /etc /path/to/process.php

看看是否有效。

答案2

crond跑?

尝试以下命令之一:

pidof crond
pgrep -l crond
ps caxf | grep -6 crond --color

最后一个命令的输出:

11881 ? S 0:00 \_ httpd 
11882 ? S 0:00 \_ httpd 
11883 ? S 0:00 \_ httpd 
11884 ? S 0:00 \_ httpd 
11885 ? S 0:00 \_ httpd 
11886 ? S 0:00 \_ httpd 
2098 ? Ss 0:01 crond             #this 'crond' is in red
2125 ? Ss 0:00 sudoscriptd 
2127 ? Ss 0:00 \_ sudoscriptd 
2136 tty2 Ss+ 0:00 mingetty 
2137 tty3 Ss+ 0:00 mingetty 
2138 tty4 Ss+ 0:00 mingetty 
2139 tty5 Ss+ 0:00 mingetty

配置是什么crond

检查您的/etc/rc.d/init.d/etc/init.d任何启动文件。

配置crond可以列出被拒绝或/和允许用户。
是您的用户吗被拒绝?检查这些文件:

   /etc/cron.allow
   /etc/cron.deny

如果两个文件都不存在,则只有 root允许
如果cron.allow不存在并且cron.deny为空,则所有用户都是允许默认情况下。

该文件/etc/crontab必须只能由 root 写入:

$ ls -l /etc/crontab
-rw-r--r-- 1 root root 255 Jul 15  2006 /etc/crontab

说什么crond

接收信息的自然方式crond是本地邮件。crond通常使用sendmail.如果sendmail不可用,可以给出另一个邮件命令(CRONDARGS="-mmail")。

但现阶段,最好是直接检查crond日志( ll /var/log/cron*)。

重新开始crond

该问题可能会在重申时得到解决crond...

如果问题仍然存在,那么在再次重新启动之前,让我们在不使用init.d或 的情况下运行它service,并尝试其他选项:

须藤 crond -p -x sch

并再次检查crond日志文件...

答案3

我已经找到问题了。这-C 命令行开关我要发送至php,本来应该是-c。我不知道为什么cron没有向我报告这一点任何方式,更不用说一种有用的方式了(或者我如何设法用大写 C 让它进入crontab,但在 CLI 上用小写字母测试它),但在 CLI 中与一位同事再次运行它,作为我的同事突然间,一切就变得显而易见了。

现在我感觉自己多么愚蠢?

好吧,至少现在问题解决了,cron我的脚本运行得很顺利。谢谢大家的帮助。

相关内容