"定时任务"的常见问题与解决方法(原创)

"定时任务"的常见问题与解决方法(原创)

最近也一直遇见这样的问题,所以整理出来,和大家分享;如偶的理解有错误,敬请指正。

--------------
定时任务的添加:
--------------
linux中:crontab -e
或者编辑 /var/spool/cron/USER ,然后crontab  /var/spool/cron/USER

solaris中:一般直接编辑文件 /var/spool/cron/crontab/USER
然后crontab /var/spool/cron/crontab/USER 来进行安装,

solaris系统不支持*/5 这样每5**执行任务的格式(我用的是solaris8,9),如果你需要设5分钟执行某个脚本,需要用下列格式:
0,5,10,15,20,25,30,35,40,45,50,55 × × × ×  /PATH/TO/SCRIPT

windows中实现同样功能,需要通过“控制面板”,“任务计划”添加。

---------------
常见问题
----------------
作为*nux系统,脚本在系统运行时,系统会“fork”一个独立的 shell 来运行脚本中的命令,这个 shell 继承了系统的环境变量。如果脚本把输出重定向为文件,且该文件使用相对路径,这时你会发现在不同的$PWD下执行输出文件的位置也不同;
你可以在子shell中对环境变量重新声明,比如在脚本首添加“cd /export/home/SysDetect”,这样子shell的$PWD就变为 /export/home/SysDetect ,使用相对路径重定向的文件也将保存到这个目录下。

这种对变量的声明windows并不支持, 如果你在你工作目录下使用了自己的*.exe 或者*.bat则最好使用全路径,避免可能发生的错误,例如:D:\detection\CPU | D:\detection\awk "{print $3}" > D:\detection\cpu.txt


有时侯会出现系统、脚本一切正常,但是任务的执行呈现无规律性,有时10分钟执行一次,有时半个小时执行一次,有时好几个小时都不执行,
这时,常见的原因是系统的作业已满,出现了拥塞! 试试用pgrep ScriptName ;看看是否有整屏的进程号!
使用 kill -9 `pgrep ScriptName` 一次杀掉这几十甚至几百的任务。
如果你的任务是5分钟执行一次,你可以每个小时运行一次清理程序:“kill -9 `pgrep ScriptName`”
linux系统在这种问题上表现的不会向solaris那么明显;
如果你使用了执行周期较长的命令,这种阻塞会更容易发生。
在windows系统上没有发现这样的情况。

----------      
thx for your great work !