我是 Linux 新手,如果这个问题太愚蠢,我很抱歉。我想知道如何正确创建 crontab,我创建了以下作业:
* * * * * /usr/src/debug/http/cron_job.sh >/dev/null 2>&1
在 cron_job.sh 中如下
pidof html
if [ 0 = $? ]
then
echo running
else
cd /usr/src/debug/http/
./html
fi
但当我检查正在运行的程序时它显示
2738 ? ... ./html
2748 ? ... ./html
2788 ? ... ./html
运行应用程序时似乎出现重复,我的设置有误吗?请告诉我如何解决这个问题?
感谢您的帮助。
答案1
您的 cron 作业开始运行,其当前工作目录设置为拥有该作业的用户的主目录。当您将要执行的脚本指定为 时/usr/src/debug/http/cron_job.sh
,它确实不是导致工作目录被改变。
因此,pidof html
实际上执行的操作与相同pidof $HOME/html
。脚本后面显示html
可执行文件实际上位于中/usr/src/debug/http/html
,因此pidof html
命令需要您正在测试的可执行文件的完整路径,因此将其替换为:
pidof /usr/src/debug/http/html
如果/usr/src/debug/http/html
实际上是一个脚本,您还需要添加选项-x
:
pidof -x /usr/src/debug/http/html
修复脚本的另一种方法是简单地将命令移动cd /usr/src/debug/http
为 cron 作业脚本的第一行,这样脚本就会始终改变到正确的目录中,甚至在尝试测试进程是否存在之前html
。