或多或少我们都会在crontab中放置几个定时任务, 这些任务的监控是个问题, 最严重的当属脚本执行到一半挂起, 大部份情况下还是由于脚本写得不够强壮, 要检查一下.

    我经历过以下三种情况下的挂起, 第一种是在调用sqlplus时, 由于连接信息不对, 导致第一次不能登录数据库, sqlplus处于等待输入密码的阶段, 引起脚本挂起. 解决方法如下, 使用”-L”选项禁止出现密码输入提示.

sqlplus -L -s “/ as sysdba” << EOF

exit;
EOF

    第二个情况是, 用ssh去远程主机执行命令时, 和远程主机的ssh没有打通, 导致ssh也出现等待输出密码阶段, 引起程序挂起. 解决方法也是用选择禁用密码输入.

ssh -n -a -q -o NumberOfPasswordPrompts=0 …

    第三种情况是, 由于网络路由问题, 或其他网络服务问题, 引起网络IO一直等待. 解决的方法是要选择可控性比较强的脚本语言, 比如在Perl中(Linux/Unix)中, 就可以通过信号中断机制来处理挂起情形.

eval {
  local $SIG{ALRM} = sub { die “???\n” };
  alarm 20;
  可能会超时的任务代码;
  alarm 0;
};

    有其他的情况, 请共享出来, 好让大家少走弯路, 助人为快乐之本.