用cronolog为tomcat做日志分割之问题解决版

XXX 不在 sudoers 文件中。此事将被报告。


百度一番,需要修改/etc/sudoers文件,将要赋权的用户添加到里面:
如下三行(如果都不存在就添加进去,第一行是注释,但是第二行不是哦)
## Allow members of group sudo to execute any command 
# %sudo    ALL=(ALL) ALL 
xx       ALL=(ALL) ALL  (将此处的XX修改为出现改问题的用户名!)


可是切换到root去vi这个文件居然还是readonly的
然后想看看从这个文件中能看到什么,拉到开头一看:
## This file must be edited with the 'visudo' command.
该文件必须使用visudo命令来编辑,然后试了一下,也不是直接使用,而是加“-f”,如:
visudo -f /etc/sudoers



顺便也看了一下,这个文件的作用:
允许一些指定的用户不用root的密码也可以像root一样执行一系列的命令,也就是这是一个命令授权文件嘛。
注意:编辑时,这里面的“#”不代表注释,要注释请使用“##”


修改后不再报“xxx 不在sudoers文件中”了,转而报:
sudo:/etc/sudoers 可被任何人写
sudo:没有找到有效的 sudoers 资源,退出
sudo:无法初始化策略插件


(估计是我之前修改sudoers文件的权限引起的,把它改回440:chmod 440 /etc/sudoers)
现在又可以使用sudo命令了。
sudo ./configure
sudo make
sudo make install
sudo make clean
sudo make distclean

好了,至此,上述几个命令都执行完了,我的东西应该也装好了,该去测试一下了。


测试结果不如意…………
以上步骤就是使用cronolog为tomcat分割日志,但是使用sudo安装的cronolog,tomcat中使用时也要分情况,如果用root用户启动没有问题,但是用别的就不行了!!!
查看了一下,用sudo命令安装的cronolog
[root@localhost sbin]# ls -l cronolog
-rwxr-xr-x. 1 root root 40454 6月  14 02:55 cronolog
还是root的东西。
那就是其他用户部署的应用可以通过root的管道创建文件,然而这个应用如果是非root启动的还是没有权限写这个文件………………够蛋疼的。


其实这儿和启动的进程是一样的,比如root启动的进程,别的用户没有权限的话是没有权限kill掉的,如果有sudo权限可以使用来kill掉。


这时候想到了Linux的chown user/usergroup file/directory,但是这个命令对文件夹使用时,里面的文件还是原来的所有者。当然,你修改时可以加上“-R”来讲子目录及子文件一并修改,
或者如果进入文件一级,将文件的所有者修改为应用启动的用户还是可以的(tomcat日志分割时还用到了bin/log/juli.***.log,这个也需要改),很明显,这不可行啊。


既然由root权限安装的cronolog的所有者是root,而在tomcat中配置使用cronolog时,是另起一root进程的(ps -ef|grep tomcat可看到,如下方描述),但是这里另起的这个进程和单独起的不一样,这里的kill掉用户自己进程的时候可以连带kill掉由这个用户进程启动的root进程。那我们将安装的cronolog的所有者改为自己的用户/用户组试试,

结果果然凑效。并且这时由cronolog创建的catalina.****.***和juli.***.**的所有者/组都是自己的用户/用户组了。



修改前:
wz   4635     1  2 16:35 pts/0    00:00:05 /usr/bin/java -Djava.util.logging.config.file=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41/endorsed -classpath /home/wz/dev/server/tomcat/apache-tomcat-6.0.41/bin/bootstrap.jar -Dcatalina.base=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41 -Dcatalina.home=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41 -Djava.io.tmpdir=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41/temp org.apache.catalina.startup.Bootstrap start
root   4636     1  0 16:35 pts/0    00:00:00 /usr/local/sbin/cronolog /home/wz/dev/server/tomcat/apache-tomcat-6.0.41/logs/catalina.%Y-%m-%d.out


切换到安装目录下(如果是root就不要sudo了),命令:
sudo chown :wz cronolog
sudo chown :wz cronosplit



修改后:
[wz@localhost bin]$ ps -ef|grep tomcat
wz 5027     1 31 17:02 pts/0    00:00:04 /usr/bin/java -Djava.util.logging.config.file=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41/endorsed -classpath /home/wz/dev/server/tomcat/apache-tomcat-6.0.41/bin/bootstrap.jar -Dcatalina.base=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41 -Dcatalina.home=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41 -Djava.io.tmpdir=/home/wz/dev/server/tomcat/apache-tomcat-6.0.41/temp org.apache.catalina.startup.Bootstrap start
wz 5028     1  0 17:02 pts/0    00:00:00 /usr/local/sbin/cronolog /home/wz/dev/server/tomcat/apache-tomcat-6.0.41/logs/catalina.%Y-%m-%d.out


完事儿,记录一下。


顺便补一下chown命令的使用:
注明一下,这是竹子-博客的文章的关键内容,感谢竹子!
http://www.cnblogs.com/peida/archive/2012/12/04/2800684.html


chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。 
  1.命令格式:
    chown [选项]... [所有者][:[组]] 文件...
  2.命令功能:
    通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。
  3.命令参数:
  必要参数:
    -c 显示更改的部分的信息
    -f 忽略错误信息
    -h 修复符号链接
    -R 处理指定目录以及其子目录下的所有文件
    -v 显示详细的处理信息
    -deference 作用于符号链接的指向,而不是链接文件本身
  选择参数:
    --reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组
    --from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变
    --help 显示帮助信息
    --version 显示版本信息
  4.使用实例:
实例1:改变拥有者和群组
  命令:
    chown mail:mail log2012.log #所有者和所有者组一并修改“:”前世所有者,后是组
   chown root: log2012.log #所有者和所有者组一并修改“:”前世所有者,后是组(和上一个是一样的效果)



实例3:改变文件群组
  命令:
    chown :mail log2012.log
实例4:改变指定目录以及其子目录下的所有文件的拥有者和群组 
  命令:
    chown -R -v root:mail test6

































你可能感兴趣的:(开发软件配置)