一:新建一个以当前日期为文件名的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
- chmod 700 ~/.ssh
- 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"
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环境变量问题)
拓展:
/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 执行的时间及频率
遇到的问题: 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.youkuaiyun.com/a2005120832/article/details/5656187
生成ssh-key http://lionsong2010.blog.163.com/blog/static/2038250472012255497782/
/etc/anaconrtab http://www.2cto.com/os/201208/146487.html