bash脚本没有按照预期从cron与shell运行.

Sub*_*hwa 2 linux bash shell cron fedora

我有一个从本网站获得的脚本,并根据我的需要进行了修改.原始帖子:用于检查进程是否正在运行并对结果执行操作的Linux脚本

从cron运行脚本时,它始终会创建一个新进程.如果我从shell运行它,它运行正常.任何人都可以帮我调试这个问题吗?

脚本

[root@server2 ~]# cat /root/full-migrate.sh
#!/bin/bash

case "$(pidof perl | wc -w)" in

0)  echo "Restarting iu-maildirtoimap:     $(date)" >> /var/log/iu-maildirtoimap.txt
    /usr/local/bin/iu-maildirtoimap -i currentuser.txt -D imap.gmail.com:993 -d -n7 -I&
    ;;
1)  echo "Everything seems okay:     $(date)" >> /var/log/iu-maildirtoimap.txt
    ;;
*)  echo "Removed double iu-maildirtoimap: $(date)" >> /var/log/iu-maildirtoimap.txt
    kill -9 $(pidof perl | awk '{print $1}')
    ;;
esac
Run Code Online (Sandbox Code Playgroud)

crontab工作

[root@server2 ~]# crontab -l
*/1     *       *       *       *       /bin/bash /root/full-migrate.sh
Run Code Online (Sandbox Code Playgroud)

从日志文件:

Removed double iu-maildirtoimap: Tue Dec 30 02:32:37 GMT 2014

Removed double iu-maildirtoimap: Tue Dec 30 02:32:38 GMT 2014

Removed double iu-maildirtoimap: Tue Dec 30 02:32:39 GMT 2014

Everything seems okay:     Tue Dec 30 02:32:39 GMT 2014

Restarting iu-maildirtoimap:     Tue Dec 30 02:33:01 GMT 2014

Restarting iu-maildirtoimap:     Tue Dec 30 02:34:01 GMT 2014

Restarting iu-maildirtoimap:     Tue Dec 30 02:35:01 GMT 2014
Run Code Online (Sandbox Code Playgroud)

前4个条目是我手动运行 "/bin/bash /root/full-migrate.sh"
的最后3个来自crontab.

有关如何调试此问题的任何建议?

在撰写本文时:

[root@server2 ~]# $(pidof perl | wc -w)
bash: 13: command not found

[root@server2 ~]# $(pidof perl | awk '{print $1}')
bash: 26370: command not found
Run Code Online (Sandbox Code Playgroud)

小智 5

您从命令行进行的测试无效,因为您基本上正在执行进程ID,这将为您提供未找到的命令.

从命令行,您需要以这种方式测试:

$ pidof perl | wc -l
Run Code Online (Sandbox Code Playgroud)

没有 $()

你最有可能遇到的问题是cron在路径中找不到pidof.所以你需要弄清楚pidof在你的系统中的位置:

$ which pidof
Run Code Online (Sandbox Code Playgroud)

然后把完整的路径放在你的cron工作中它应该工作.