Linux Tomcat 定时重启中文乱码

来源:互联网 发布:sftp 端口号 编辑:程序博客网 时间:2024/04/19 14:01

自动重启tomcat及重启后乱码问题

  Tomcat作为开源的服务器,性能与稳定性上比起一些商业服务器还是要差一些。将项目部署到Tomcat后隔段时间就会死掉,出现

这种问题的主要原因可 能是内存数据溢出,因为Tomcat容器在发生大量与数据库交互查询或者操作的时候很容易出现问题。定时重启

是一个很好的补救措施,定时重启可以定时的清 理内存也降低了Tomcat运行的风险,从而保持tomcat的最佳性能。


定时执行的命令是crontab,编辑/var/spool/cron/下的root文件(路径根据系统的不同可能不同,没有root文件就新建),加入以下两行:


1 6 * * * /usr/local/apache-tomcat-6.0.20/bin/shutdown.sh
2 6 * * * /usr/local/apache-tomcat-6.0.20/bin/startup.sh


其中开头的1 6 * * *表示在每天的早上6点1分执行,详细介绍请百度之。
这样在关闭之后1分种再开启tomcat。


你可能要问,可不可以都在6点1分执行,即都写成1 6 * * *? 答案是不行,虽然开启tomcat的命令写在关闭的下面,但同一时间的命令并不是按写的先后顺序执行的,有可能先执行了开启的命令,后执行关闭的命令,这样今天tomcat就用不了了。
当然你可以把这两行命令(去掉前面的1 6 * * *)写在一个restartTomcat.sh文件里,中间加一行sleep 10s,然后在root文件里加一句1 6 * * * restartTomcat.sh。如此就可以每天早上6点1分自动重启tomcat了。


问题集锦:

1、有些地方显示的汉字是乱码,手工重启tomcat后就没有乱码了。原因是手工重启与默认系统任务自动重启的字符集是不一样的,这是因为Unix/Linux下使用crontab是的运行环境以及不是用户环境了,因此原本用户下的一些环境变量的设置就失效了。例如原来用户环境变量设置的是GB2312,但是使用crontab运行时的环境变量就可能是ISO8859-1。解决方法是编辑/usr/local/apache-tomcat-6.0.20/bin/catalina.sh,在里面加一行:

CATALINA_OPTS=-Dfile.encoding=UTF8


就OK了(具体编码根据页面编码修改)。

2、如果还不起作用,可以试试以下方法。

修改当前用户下 .bash_profile 文件,添加一行

export LANG=en_US.UTF-8

之后在定时脚本里引入此文件。

! /usr/local/bin/bash

. /home/username/.bash_profile

注意,在/home/username/.profile前面有一个点和空格。

Linux 下.(点)开头的文件默认是隐藏,可以用 ll -a 命令查看。

3、使用crontab 的时候还要注意一点。

使用方式 : 
crontab [ -u user ] file 
crontab [ -u user ] { -l | -r | -e } 

说明 : 
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。 

-u user  此参数省略的话,默认编辑当前用户的crontab。

例子:crontab -u tom /home/tom/test.cron

导入tom用户下,test.cron这个时程表,此文件可以自己创建,然后写一些执行脚本,前提是这个脚本必须有执行的权限,不然会失败。

假设 test.cron 里引用了,back.sh 这个脚本,那么可用 chomd +x /home/tom/backup.sh (增加可执行权限)

可以直接执行此脚本试试,然后再放到crontab里。

这样在/var/spool/cron目录下会增加一个tom的文件,就是tom用户的时程表了,一般还会有root这个文件。

如果是root用户要编辑此crontab的话,可使用

crontab -u tom -e  //编辑

crontab -u tom -l //查看

cron 服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是: 

SHELL=/bin/bash 

PATH=/sbin:/bin:/usr/sbin:/usr/bin 

MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 

HOME=/ //使用者运行的路径,这里是根目录 

# run-parts 

01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本 

02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本 

22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本 

42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本 

还要注意/etc/目录下两个文件。

/etc/cron.deny 

该文件中所列的用户不允许使用Crontab命令 

/etc/cron.allow 

该文件中所列的用户允许使用Crontab命令

如果都存在则以/etc/cron.allow 优先。