自动异机备份--linux

6 篇文章 0 订阅
1 篇文章 0 订阅
每天自动新建一个以当前日期为文件名的txt文件(记录当前时间)并发送到10.1.1.213的root目录下
一:新建一个以当前日期为文件名的txt文件并发送到10.1.1.213的root目录下:
        [root@A qt]# vi c.sh
        #!/bin/sh
        DATE=`date +%d -d 'now'`;
        MONTH=`date --date 'now' +%m`;
        mv *.txt bak/ ;
        date >>date$MONTH$DATE.txt;
        scp *.txt root@10.1.1.213:/root/;

    这样执行c.sh需要输入10.1.1.213的密码

    实现A->B登录/执行命令/传文件无需密码,无需交互。
        1、在A机器上生成KEY文件,
             [root@A ~]# ssh-keygen -t rsa
            Generating public/private rsa key pair.
            Enter file in which to save the key (/root/.ssh/id_rsa):    (回车)
            Created directory '/root/.ssh'.                    
            Enter passphrase (empty for no passphrase):            (回车)
            Enter same passphrase again:                    (回车)
            Your identification has been saved in /root/.ssh/id_rsa.
            Your public key has been saved in /root/.ssh/id_rsa.pub.
            The key fingerprint is:
            32:b8:99:9e:7f:e1:fd:18:32:81:64:b0:2b:d6:a1:d0 root@lionsong-test
            这里我们就生成要用的KEY文件了
            [root@A .ssh]# cd /root/.ssh/
            [root@A .ssh]# ls
            id_rsa  id_rsa.pub
            两个文件分别是私钥和公钥

            把你要的公钥文件放到你要登陆的机器上/root/.ssh下就可以了。

        2、 scp ~/.ssh/id_rsa.pub xxx@host:/home/xxx/id_rsa.pub

  1. chmod 700 ~/.ssh
  2. chmod 600 ~/.ssh/authorized_keys 


        2、      [root@A .ssh]# ssh-copy-id -i ./id_rsa.pub root@10.1.1.213      (B的ip)

                    ssh端口不是22

                    [root@A .ssh]#ssh-copy-id -i ./id_rsa.pub "-p 2622 root@10.1.1.213"

            The authenticity of host '10.1.1.213 (10.1.1.213)' can't be established.
            RSA key fingerprint is d9:86:ff:8c:7a:c3:01:d0:e2:22:05:df:a1:e9:2b:05.
            Are you sure you want to continue connecting (yes/no)?
            yes ------登录上就ok
            这样传到你的服务器上就可以了!然后我们接下来从A登录到B的时候你就会发现已经不需要密码了!
二:
        每天自动执行
        [root@A qt]# /sbin/service crond start
        [root@A qt]# crontab -e

        * * */1 * * root  /root/qt/c.sh     (每天执行一次c.sh)

        * 0 * * * . /etc/profile;/bin/sh  /home/setup/oracle/datafiles/expdp.sh(每天0点执行脚本expdp.sh,注意标红的,只要root手动能运行expdp.sh,这个脚本自动就能运行,这个解决了手动能执行crontab不能自动执行的问题。crontab环境变量问题)

        [root@A qt]# /sbin/service crond restart
                
            拓展:
                        /sbin/service crond start //启动服务
                        /sbin/service crond stop //关闭服务
                        /sbin/service crond restart //重启服务
                        /sbin/service crond reload //重新载入配置

                        crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
                        crontab -l //列出某个用户cron服务的详细内容
                        crontab -r //删除某个用户的cron服务
                        crontab -e //编辑某个用户的cron服务


                        进入vi编辑模式,编辑的内容一定要符合下面的格式:
                        */2 * * * * ls >> /tmp/ls.txt //每2分钟执行一次ls输出结果到ls.txt
                        1,2,3 * * * * ls >> /tmp/ls.txt //分钟数为1-3时执行ls输出结果到ls.txt
                        1-3 * * * * ls >> /tmp/ls.txt //分钟数为1-3时执行ls输出结果到ls.txt
                        42 4 1 * * root run-parts /etc/cron.monthly //每月1号4时42分去执行/etc/cron.monthly内的脚本
                         | | | | |
            minute--  | | | |

             hour   ---  | | |

              day      ---  | |

            month      ---  |

          dayofweek    ---

                

                 root想删除fred的cron设置:crontab -u fred -r

#######################

另一种方法

将aa.sh(root可直接执行)放到 /etc/cron.daily/下

#/bin/sh
ORACLE_HOME=/home/setup/oracle/oracle
ORACLE_SID=DATA
USER=user
PASSWORD=passwd
COM=company
DIRECTORY=expdir



DATE=`date +%Y-%m-%d`
mv $COM*  bak/
LOGFILE=$COM-$DATE.log
DUMPFILE=$COM-$DATE.dmp
export ORACLE_HOME
export ORACLE_SID
echo $DATE
su - oracle -c "$ORACLE_HOME/bin/expdp $USER/$PASSWORD@$ORACLE_SID dumpfile=$DUMPFILE logfile=$LOGFILE directory=$DIRECTORY"

cron.daily拓展

/etc/anaconrtab 中规定了/etc/cron.daily  执行的时间及频率

period(频率.天数) delay(延迟,分钟) job-identifier command 
 1       65      cron.daily              run-parts /etc/cron.daily 
 7       70      cron.weekly             run-parts /etc/cron.weekly 
 30      75      cron.monthly            run-parts /etc/cron.monthly

遇到的问题: zip warning: name not matched: b.log

crontab 中添加了脚本/home/A/a.sh

zip b.zip b.log

/home/A 下有b.log文件
/home/A 下执行a.sh是可以的
但是在其他路径下执行(在/下 /home/A/a.sh)就报错,同理添加到crontab中也是报错找不到b.log!!

在/下 执行 /home/A/a.sh   去当前目录下找b.log

将b.log加上就对路径即可,或者在a.sh中添加cd /home/A



参考:

定时执行     http://www.blogjava.net/decode360/archive/2009/09/18/287743.html
文件定时复制 http://bbs.chinaunix.net/thread-1976778-1-1.html
shell:      http://blog.csdn.net/a2005120832/article/details/5656187

生成ssh-key  http://lionsong2010.blog.163.com/blog/static/2038250472012255497782/

/etc/anaconrtab http://www.2cto.com/os/201208/146487.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值