linux设置crontab时遇到的两个问题
2009-01-09 14:48
645 查看
用crontab 配置上次写的监控脚本,定时重启一个java应用,遇到两个问题:
首先,这个java程序是由一个脚本程序来启动的,直接 sh 脚本程序,可以正确启动执行,但是直接加到crontab中却不能正确执行。因为这个脚本执行所需的CLASSPATH变量是在用户的profile中设定的,怀疑crontab中启动的程序并不能直接获得系统设定的环境变量,于是把系统环境变量中的CLASSPATH在脚本中重新export了一下,重新设置crontab就可以启动这个程序了。
然后,程序启动后ps发现了多了两个进程,
...............[sh] <defunct>
...............usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t
上面那个是一个僵死进程,
经google了解这个问题一般是由于crontab里的程序输出大量信息到标准输出设备造成的,输出的信息触发了系统的sendmail,把信息当作邮件发给用户。
解决方法也很简单,就是把输出重定向到空设备即可。所以把脚本里执行java程序的命令改成 /usr/bin/java xxxxxx > /dev/null 2>&1 ,就是把标准输出重定向到空设备,把输出的错误信息也重定向到标准输出设备(也不显示在输出设备上了,因为前面已经屏蔽标准输出设备了)。
这里涉及到管道的问题,
0:标准输入设备
1:标准输出设备
2:标准错误设备
首先,这个java程序是由一个脚本程序来启动的,直接 sh 脚本程序,可以正确启动执行,但是直接加到crontab中却不能正确执行。因为这个脚本执行所需的CLASSPATH变量是在用户的profile中设定的,怀疑crontab中启动的程序并不能直接获得系统设定的环境变量,于是把系统环境变量中的CLASSPATH在脚本中重新export了一下,重新设置crontab就可以启动这个程序了。
然后,程序启动后ps发现了多了两个进程,
...............[sh] <defunct>
...............usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t
上面那个是一个僵死进程,
经google了解这个问题一般是由于crontab里的程序输出大量信息到标准输出设备造成的,输出的信息触发了系统的sendmail,把信息当作邮件发给用户。
解决方法也很简单,就是把输出重定向到空设备即可。所以把脚本里执行java程序的命令改成 /usr/bin/java xxxxxx > /dev/null 2>&1 ,就是把标准输出重定向到空设备,把输出的错误信息也重定向到标准输出设备(也不显示在输出设备上了,因为前面已经屏蔽标准输出设备了)。
这里涉及到管道的问题,
0:标准输入设备
1:标准输出设备
2:标准错误设备
相关文章推荐
- linux crontab设置正确,定时任务无法执行问题
- 安装linux系统时候遇到的两个问题
- 在linux64位机器上编译时遇到的两个问题
- 在linux当中设置变量时遇到的问题
- eclipse se 转eclipse ee遇到的两个设置问题
- linux下配置mysql解析 遇到新问题两个。
- fortran77格式程序从windows下移植linux下遇到的两个问题
- 【Linux】U盘安装Centos6.3遇到的两个重要问题及其解决方法
- iptables的NAT功能设置和linux升级内核后遇到 can't initialize iptables table `nat': Table does not exist 问题
- ssh免密码登录【遇到的问题: linux下设置了SSH免密码登录但还是需要输入密码的解决办法 】
- Linux设置静态ip后遇到的问题及其解决方案
- ptables的NAT功能设置和linux升级内核后遇到 can't initialize iptables table `nat': Table does not exist 问题
- Linux创建FTP服务器,添加用户,设置用户独立目录的过程及遇到的问题
- linux下免密码证书登入设置&遇到问题解决办法
- 工作中遇到的问题之linux设置互信访问
- 在linux64位机器上编译时遇到的两个问题
- linux安装jdk,设置环境变量遇到的一个奇葩问题
- 【linux】ubuntu下安装gae遇到的两个问题及解决办法
- Linux下IP设置脚本的实例及遇到问题解决办法
- 【linux】crontab运行python脚本遇到的问题