Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2136178
  • 博文数量: 274
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5482
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好, 不为金钱, 而纯粹是为了在这个领域享受追寻真理的快乐.

文章分类

全部博文(274)

文章存档

2015年(3)

2014年(5)

2013年(26)

2012年(58)

2011年(182)

分类: LINUX

2011-07-06 13:14:55

    由于工作的关系需要维护一些windows2003服务器,要执行一些脚本操作,没法子BAT不会,就只会shell,怎么办呢?有办法的,接下来我给大家介绍一整套利用shell维护windows服务器的办法。
 
    首先去http://cygwin.com首页下载setup.exe,安装的时候注意默认是不会安装 cygrunsrv 和 cron 这2个程序的,所以大家要在Admin项里把这2个程序安装上,顺便在Editer项里把vim也装上吧。话说cygwin下的vim还真不太好用。
 
    安装完成后启动cygwin程序,熟悉吧,跟shell一样的界面和操作。这时候我得到的任务是需要自动化处理:定时移动目录A下的90天前的以8位日期为文件名的文件夹到目录B中。这个问题不太难,判断目录名称是否小于90天前的那个日期,用shell来说不太难。但是这个cygwin也就是Windows下的一个程序,如何让它定时运行脚本呢?原来cygwin自己有建立在windows下的启动服务,通过这个cron服务,就跟我们在Linux下定植crontab是一样的了。在安装cron服务中遇到了不少的挫折,查询了好多资料才搞定。关键的问题,一般服务器的Administrator肯定设有密码的,所以这个时候要配置cron服务并以验证密码以管理员权限登陆才能启动cron,大家按照下面的提示操作:
$ cron-config
Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec
Do you want the cron daemon to run as yourself? (yes/no) yes
Please enter the password for user 'Administrator':键入密码
Reenter:再次键入密码
这时候在系统的服务里可以看到 Cron daemon 和 cygserver 这两个进程已经成功启动了。然后再在cygwin里启动该服务:
  1. # 启动 cygserver
  2. cygrunsrv -I cygserver -p /usr/sbin/cygserver -e "CYGWIN=server"
    启动 cron 以后,即使关闭cygwin命令窗口,cron还是会继续运行,而且默认是自动启动的服务,重启机器以后依然运行—不需要开cygwin我们定制的crontab计划一样照常运行,这样的话我们就可以在windows下利用shell的强大功能来维护系统了,BAT?咱不需要了。
 
对于系统管理员没有密码的系统也按照上面的设置,密码随便键入,到时候再去服务里找到 Cron daemon 项再改为本地系统账户,然后再启动2个服务器就行了。
 
    总算是把cygwin的cron搞定了,我们接着还要搞定crontab,下面我引入前人对crontab环境变量的总结:
1. crontab与环境变量
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
2. 其他应该注意的问题
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r 它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date '+%Y%m%d'在crontab里是不会执行的,应该换成date '+\%Y\%m\%d'。
 
  1. $ crontab -l
  2. 0 3 * * * source /etc/profile;/cygdrive/d/cpdir.sh
  1. #!/bin/bash
  2. /usr/bin/find /cygdrive/e/test -mindepth 1 -type d | /usr/bin/awk -F'/' -vd=$(/usr/bin/date -d "-90 days" +\%Y\%m\%d) 'NF{if($5<d){system("mv "$0" /cygdrive/f/test/")}}'

有了以上的帮助,哈哈顺利完成任务!

再来个更简单的吧,可以利用windows的计划任务运行以下DOS命令:

  1. C:\cygwin\bin\bash.exe -l -c "/cygdrive/d/cpdir.sh"

好吧,用我们的shell去维护WIN吧。

阅读(4646) | 评论(1) | 转发(1) |
0

上一篇:sed之批量更名

下一篇:sed之+行输出

给主人留下些什么吧!~~

lionfun2011-07-07 13:00:17

学习!

评论热议
请登录后评论。

登录 注册