需求:公司内部使用自己电脑,回家需要使用另一台电脑,所以想时时备份公司用的电脑中文件、代码到服务器上,回家就可以用啦

1 无密码使用scp

(1)第一步:生成密匙对,我用的是rsa的密钥。使用命令 "ssh-keygen -t rsa"
[user1@rh user1]$ ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/user1/.ssh/id_rsa): 
Created directory '/home/user1/.ssh'. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user1/.ssh/id_rsa. 
Your public key has been saved in /home/user1/.ssh/id_rsa.pub. 
The key fingerprint is: 
e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7 user1@rh.test.com 
[user1@rh user1]$

(2)生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一

个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个。(我比较懒

,不想每次都要输入密码。) 这样,密钥对就生成完了。

其中公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa

然后改一下 .ssh 目录的权限,使用命令 "chmod 755 ~/.ssh"
[user1@rh user1]$ chmod 755 ~/.ssh

(3)之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为

~/.ssh/authorized_keys.
[user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys 
user1@rh1's password: 
id_rsa.pub 100% 228 3.2MB/s 00:00 
[user1@rh user1]$

2 脚本编写

(1)版本1

#!/bin/sh
echo "[`date '+%Y-%m-%d %H:%M:%S'`]------------------------"
cd /Users/scg/Desktop
scp -r pan shenchengguang@dev.sankuai.com:~/

3 定时调用脚本

MAC下可以用launchctl来定时执行任务。

launchctl通过plist配置的方式来实现定时任务的,其优点就是最小时间间隔是一秒

plist脚本存放路径为/Library/LaunchDaemons或/Library/LaunchAgents,其区别是后一个路径的脚本当用户登陆系统后才会被执行,前一个只要系统启动了,哪怕用户不登陆系统也会被执行。

可以通过两种方式来设置脚本的执行时间。一个是使用StartInterval,它指定脚本每间隔多长时间(单位:秒)执行一次;另外一个使用StartCalendarInterval,它可以指定脚本在多少分钟、小时、天、星期几、月时间上执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.meituan.scg.plist</string>
<key>ProgramArguments</key>
<array>
<string>/Users/scg/Desktop/pan.sh</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>600</integer>
<key>StandardOutPath</key>
<string>/Users/scg/Desktop/pan.log</string>
<key>StandardErrorPath</key>
<string>/Users/scg/Desktop/pan_error.log</string>
</dict>
</plist>

说明:

(1)label这里就是给这个任务名个名字,这里一般取plist的文件名,这个名字不能和其它的plist重复。

(2)pan.sh就是我们要执行的脚本

(3)KeepAlive 是否一直保持alive

(4)StartInterval 每隔多少秒执行

详细参数见 https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html

我将这个plist文件放在/Library/LaunchDaemons。需要做chown root *.plist 和 chgrp while *.plist 但是在启动launchctl 不要用sudo,因为这样会调用root,然而我们的ssh应该使用的当前用户,会导致不能免密码登录。

4 执行这个plist

  • 要让任务生效,必须先load命令加载这个plist
  • 如果任务呗修改了,那么必须先unload,然后重新load
  • start可以测试任务,这个是立即执行,不管时间到了没有
  • 执行start和unload前,任务必须先load过,否则报错
  • stop可以停止任务
  • ProgramArguments内不能直接写命令,只能通过shell脚本来执行
 

最常使用的命令:

  1. 加载任务 launchctl load -w ***.plist ;-w选项会将plist文件中无效的key覆盖掉,建议加上
  2. 删除任务 launchctl unload -w ***.plist
  3. 查看任务列表 launchctl list;列表会显示很多任务,建议过滤一下:launchctl list | grep '任务的部分名字'
5 todo 
(1) 开机自启动
(2) 只复制那些修改了的文件。(需要一个文件保存所用文件的md5值,然后遍历每个文件,比较下当前的md5值) http://blog.csdn.net/topasstem8/article/details/6551908 http://blog.chinaunix.net/uid-20613650-id-3269470.html
 
 
参考文章
http://www.netingcn.com/tag/mac-os-crontab
http://my.oschina.net/jackin/blog/263024
http://my.oschina.net/shede333/blog/470377
http://honglu.me/2014/09/20/OSX%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html

MAC自动备份数据到服务器的更多相关文章

  1. 如何将云上的Linux文件自动备份到本地服务器

    需求场景: 将云上一台Linux服务器文件备份到本地服务器,一周一备即可. 面对这样一个需求,我们可能面临下列几个问题, 备份方式:是云服务器推文件到本地服务器写入,还是本地服务器从云服务器拉文件?这 ...

  2. Oracle自动备份数据

    一. Oracle自动备份单表一个月数据 方式一:三步处理(建批处理文件,写sql文件,设置任务计划) 1. 第一步:建立一个批处理文件 @echo off Set OrclSid=orcl Set ...

  3. 在linux下实现mysql自动备份数据

    使用的系统为CentOS,mysql版本为5.6 备份功能主要利用以下功能实现: mysql命令中的mysqldump命令 linux下脚本编写 linux下crontab定时任务的使用 首先确定你要 ...

  4. Sql Server--如何自动备份数据

    下面我来讲一下如何通过维护计划来实现完整备份+差异备份: (1)在SSMS的对象资源管理器中右击“维护计划”,选择“维护计划向导”,系统将弹出向导窗口,如图: 这里向导已经告诉我们维护计划到底能够干什 ...

  5. 转 SqlServer中如何实现自动备份数据!

    第1种方法: 企业管理器  --管理  --右键数据库维护计划  --新建维护计划  --<下一步>  --选择你要备份的数据库  --<下一步>直到"指定数据库备份 ...

  6. navicat自动备份数据

    1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业". 2.双击上面的可用任务,它就会到下面的列表 ...

  7. SQL Server 自动备份数据脚本

    脚本: use master; go ---声明变量 declare @dbName nvarchar(max)='MG_DATA'; ),) +'_'+ DateName(hour,GetDate( ...

  8. 服务器下自动备份MySQL

    Linux下 service crond restart */ * * * * /home/mysqlbackup.sh >/home/runssh.log backup.sh #bin/bas ...

  9. MYSQL自动备份策略的选择

    目前流行几种备份方式: 1.逻辑备份:使用mysql自带的mysqldump工具进行备份.备份成sql文件形式.优点:最大好处是能够与正在运行的mysql自动协同工作,在运行期间可以确保备份是当时的点 ...

随机推荐

  1. 思考 ”前端开发人员都在关注的 GitHub 资源“

    点这里 原文: 资源 免费的计算机编程类中文书籍 免费编程书籍 计算机科学论文 codeparkshare Python初学者书籍.视频.资料.社区推荐 Python资料汇总 app应用推荐 码农周刊 ...

  2. cellspacing与cellpadding

    此文引用自cellpadding和cellspacing属性来控制表格边框的间距. 作者:nestea 巢(cell) -- 表格的内容 巢补白(表格填充)(cellpadding) -- 代表巢外面 ...

  3. java消息队列

    来个个人通俗的解释吧.消息队列,顾名思义 首先是个队列.队列的操作有入队和出队 也就是你有一个程序在产生内容然后入队(生产者) 另一个程序读取内容,内容出队(消费者) 我想你应该是缺乏一个使用场景. ...

  4. 做一款仿映客的直播App

    投稿文章,作者:JIAAIR(GitHub) 一.直播现状简介 1.技术实现层面 技术相对都比较成熟,设备也都支持硬编码.iOS还提供现成的Video ToolBox框架,可以对摄像头和流媒体数据结构 ...

  5. mysql和oracle的一个汉字占几个字符

    以前一直使用oracle11g,一个汉字占3个字节,所以在操作mysql时也一直这样分配长度. 今天测试了下发现不对了 可以看到第一个的长度确实是15,但是第二个为什么是5? 在网上找到资料:char ...

  6. jquery的extend和fn.extend的使用说明

    jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”.jQuery类的实例可以使用这个“成员函数”. jQuery为开发 ...

  7. 浅谈Linux下的五种I/O模型

     一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所 ...

  8. Android eclipse中程序调试

    一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...

  9. linux 系统 tar 的用法详解

    [root@localhost xu]# tar --help 用法: tar [选项...] [FILE]... GNU ‘tar’ 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还 ...

  10. TFSAPI

    Team Foundation Server (TFS)工具的亮点之一是管理日常工作项, 工作项如Bug, Task,Task Case等. 使用TFS API编程访问TFS服务器中的工作项, 步骤如 ...