【问题标题】:Command not found even crontab PATH is set即使设置了 crontab PATH,也找不到命令
【发布时间】:2023-03-11 05:44:02
【问题描述】:

即使我将 /etc/crontab 中的 PATH 设置为

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/mailman/cron:/usr/lib/mailman/bin

/usr/lib/mailman/cron 中的命令仍然找不到,因此向 root 发送邮件说

/bin/sh: mailman: command not found

我已经调试了问题,设置了一个 cron 条目

* * * * * /bin/echo "`/bin/date`: $PATH" >> /tmp/crontest.log 2>&1

使用 crontab -e 实际上确实将 PATH 写入 /tmp/crontest.log,确认 /etc/crontab 中输入的路径不是 cron 认为的应该是的。

Fri Feb 14 10:22:01 CET 2014: /usr/bin:/bin

我还尝试通过使用(两者)service crond restartservice crond stop;sleep 5;service crond start 重新启动 cron 来解决它(其中做同样的事情,但要绝对确定它已重新启动),但这不会改变任何事情。

/etc/crontab 文件可供所有人读取(权限为 644 root root)

-rw-r--r-- 1 root root 500 10 feb 10:36 /etc/crontab

/var/log/cron 没有显示任何有关问题的信息,只显示了启动的内容以及我重新启动 cron 的时间

grep -v CMD /var/log/cron
.
.
.
Feb 14 09:45:34 p1kitlst01l crond[12214]: (CRON) INFO (running with inotify support)
Feb 14 09:45:34 p1kitlst01l crond[12214]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Feb 14 09:48:07 p1kitlst01l crontab[12331]: (root) BEGIN EDIT (root)
Feb 14 09:48:45 p1kitlst01l crontab[12331]: (root) REPLACE (root)
Feb 14 09:48:45 p1kitlst01l crontab[12331]: (root) END EDIT (root)
Feb 14 09:49:01 p1kitlst01l crond[12214]: (root) RELOAD (/var/spool/cron/root)
Feb 14 10:01:01 p1kitlst01l run-parts(/etc/cron.hourly)[13010]: starting 0anacron
Feb 14 10:01:01 p1kitlst01l run-parts(/etc/cron.hourly)[13027]: finished 0anacron
Feb 14 10:01:01 p1kitlst01l run-parts(/etc/cron.hourly)[13010]: starting mcelog.cron
Feb 14 10:01:01 p1kitlst01l run-parts(/etc/cron.hourly)[13039]: finished mcelog.cron
Feb 14 10:19:16 p1kitlst01l crontab[13840]: (root) BEGIN EDIT (root)
Feb 14 10:19:23 p1kitlst01l crontab[13840]: (root) END EDIT (root)
Feb 14 10:27:17 p1kitlst01l crond[14170]: (CRON) STARTUP (1.4.4)
Feb 14 10:27:17 p1kitlst01l crond[14170]: (CRON) INFO (running with inotify support)
Feb 14 10:27:17 p1kitlst01l crond[14170]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

对我必须研究的内容有什么建议吗?

亨里克

【问题讨论】:

标签: linux unix cron crontab


【解决方案1】:

我认为,你有两条路可以走(也许其他人提供更多)。

1) 在脚本中设置 mailman 的绝对路径。

2) source .profile,然后运行脚本,如:

0 1 * * * . ~/.profile; bash your_script.sh

【讨论】:

  • 谢谢。但是 1) is 绝对路径和 2) 将是一种解决方法。由于 cron 通常不会获取 /etc/profile 而不是 ~/.profile),因此假设在 /etc/crontab 中使用 PATH 行,因为 cron 在此之前不知道任何内容。我想解决这个问题,而不仅仅是实施解决方法。
  • 这不是解决方法,我们确实通过这种方式解决了 cronjob 问题(与您的相同)。
  • 查看用户 mailman 的 cron (crontab -u mailman -l) 显示从默认 Mailman cron 文件加载的 cron 条目,都提到了用户 mailman 30 4 * * * mailman /usr/lib /mailman/cron/cull_bad_shunt 就像 /etc/cron.d/mailman 语法一样。通过发出 crontab -u mailman -r 并重新启动 Mailman,Mailman 默认 cron 文件被复制到 /etc/cron.d/mailman 中。使用 crontab -l 通常需要在 cron 调用的脚本中设置路径。
  • 我仍然不明白为什么使用 crontab -e 不使用 /etc/crontab 文件中所述的路径,即使对于新的 crontabs 也是如此
猜你喜欢
  • 2013-11-02
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多