如何使用Crontab中的哪个命令?

如何使用Crontab中的哪个命令?

我想让 crontab 以普通用户身份运行此脚本:

#!/usr/bin/env bash

PIDFILE=wp-content/uploads/sphinx/var/log/searchd.pid


if ! test -f ${PIDFILE} || ! kill -s 0 `cat ${PIDFILE}`; then
    `which searchd` --config /home/user/www/wordpress-page/wp-content/uploads/sphinx/sphinx.conf
fi

它只是重新运行 Sphinx Search 守护进程,因为如果任何内存超过 1GB(其 Webfaction),我的共享服务器就会杀死所有守护进程。

当我通过 CLI 命令手动调用该脚本时,它可以工作,但如果我将其附加到 crontab 中(使用crontab -e),我会收到一封包含错误的电子邮件

which: no searchd in (/usr/bin:/bin)
/home/user/www/wordpress-page/run-searchd.sh: line 8: --config: command not found

简单地说,它搜索根级别,但我希望当我以普通用户身份通过​​ ssh 登录时,它的行为就像我自己调用的那样。如何做到这一点?

答案1

这可能是因为$PATH.在您的 shell 之外执行此操作crontab

command -v searchd | xargs dirname

此命令将返回系统上的目录,或者如果您甚至在交互式 shell 中searchd没有该目录,则会返回错误。现在在您执行的脚本的顶部执行此操作:searchd$PATHcrontab

 PATH=<directory_from_above_command>:$PATH

或者只使用完整路径searchd而不是which searchd.

which如果您想完全了解它的工作原理,请继续阅读以下内容:为什么不用“哪个”呢?那该用什么呢?

答案2

直接使用就可以了searchid。如果which能找到它,它已经在你的里面了$PATH,所以没有必要which在这里使用。

如果您希望确保能够执行它,请使用该实用程序及其完整绝对路径。

另请参阅问题为什么不用“哪个”呢?那该用什么呢?(关于which一般情况)。

相关内容