跳至主要内容

利用Mac下的launchctl(定时任务)来备份数据到google盘

利用Mac下的launchctl(定时任务)来备份数据到google盘

1. 说明

由于sandy用的是黑苹果,未知的状态太多。所以得备份。时光机器可以解决为什么还要launchctl来备份吗?两手备份是最安全的,吃过这样的亏上过这样的当。还是多一个备份渠道还是好滴!

2. 开始制作

2.1 创建备份脚本.sh脚本

进入~/Users/用户名称/ 程序所在目录

cd ~/Users/sandyliao

创建imacdownbak.sh脚本

vim imacdownbak.sh

添加下面脚本,修改相关的配置

#!/bin/bash
#你要修改的地方从这里开始
WEB_DATA=/Users/sandyliao/Downloads          #要备份的网站数据,如果是使用lnmp安装包,则默认这个为网站目录
#你要修改的地方从这里结束

#定义web数据的名字和web数据的名字
WebBakName=imac_Downloads_$(date +%Y%m%d).tar.gz
OldWeb=imac_Downloads_$(date -d -10day +"%Y%m%d").tar.gz

#删除Google Drive10天前的数据
rm -rf /Users/sandyliao/.CMVolumes/home\ sandy/imac/imac_Downloads_$(date -d -1day +"%Y%m%d").tar.gz
#进入本地目录
cd /Users/sandyliao/Downloads

#压缩网站数据
tar zcf /Users/sandyliao/Downloads/$WebBakName $WEB_DATA

#移动到Google Drive盘里面去
mv /Users/sandyliao/Downloads/$WebBakName /Users/sandyliao/.CMVolumes/home\ sandy/imac/
echo “imac备份结束”

:wq #保存退出

注意,脚本要改成可执行的权限

chmod 777 run.sh

2.2 2 编写plist文件

launchctl 将根据plist文件的信息来启动任务。
plist脚本一般存放在以下目录:

/Library/LaunchDaemons -->只要系统启动了,哪怕用户不登陆系统也会被执行

/Library/LaunchAgents -->当用户登陆系统后才会被执行

更多的plist存放目录:

~/Library/LaunchAgents 由用户自己定义的任务项
/Library/LaunchAgents 由管理员为用户定义的任务项
/Library/LaunchDaemons 由管理员定义的守护进程任务项
/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
/System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

进入 ~/Library/LaunchAgents

cd ~/Library/LaunchAgents

创建一个plist文件 com.imacdownbak.plist

vim com.imacdownbak.plist

<?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>
  <!-- Label唯一的标识 -->
  <key>Label</key>
  <string>com.imacdownbak.plist</string>
  <!-- 指定要运行的脚本 -->
  <key>ProgramArguments</key>
  <array>
    <string>/Users/sandyliao/imac-down-bak.sh</string>
  </array>
  <!-- 指定要运行的时间 每天凌晨3点运行 -->
  <key>StartCalendarInterval</key>
  <dict>
        <key>Minute</key>
        <integer>00</integer>
        <key>Hour</key>
        <integer>03</integer>
  </dict>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/sandyliao/imac-down-bak.log</string>
<!-- 标准错误输出文件,错误日志 -->
<key>StandardErrorPath</key>
<string>/Users/sandyliao/imac-down-bak.err</string>
</dict>
</plist>

2.2.3 加载命令

launchctl load -w com.imacdownbak.plist

这样任务就加载成功了。

2.2.4 更多的命令

# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w com.demo.plist

# 删除任务
$ launchctl unload -w com.demo.plist

# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'com.demo'

# 开始任务
$ launchctl start  com.demo.plist

# 结束任务
$ launchctl stop   com.demo.plist

3 番外篇

plist支持两种方式配置执行时间:
  • StartInterval: 指定脚本每间隔多长时间(单位:秒)执行一次;
  • StartCalendarInterval: 可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置,包含下面的 key:
Minute <integer>
The minute on which this job will be run.
Hour <integer>
The hour on which this job will be run.
Day <integer>
The day on which this job will be run.
Weekday <integer>
The weekday on which this job will be run (0 and 7 are Sunday).
Month <integer>
The month on which this job will be run.

plist部分参数说明
  1. Label:对应的需要保证全局唯一性;
  2. Program:要运行的程序;
  3. ProgramArguments:命令语句
  4. StartCalendarInterval:运行的时间,单个时间点使用dict,多个时间点使用 array
  5. StartInterval:时间间隔,与StartCalendarInterval使用其一,单位为秒
  6. StandardInPath、StandardOutPath、StandardErrorPath:标准的输入输出错误文件,这里建议不要使用 .log 作为后缀,会打不开里面的信息。
  7. 定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的,这个时候,可以定时的启动屏幕就好了。

更多的参数参见:mac官方文档

评论

此博客中的热门博文

阿里云通过Nginx中转Linode/digitalocean/AWS的V2ray协议,实现负载均衡

开篇文的废话.原因是Sandy做站服务器太多了,发现利用率不高,皮又痒了又想折腾了.v2ray是利器但是给人的感觉就是只能用一台服务器,官方也说不支持负载均衡,不会A服务器挂机,自动跳转到B服务器.这里就有点折磨人了.每个服务器挂了都要自己去改配置文件. 我们访问国外的服务器,如果没CN2的线路是非常慢的,起码不快!哈哈~现在VPS都便宜起码人手一个人有5台以上吧?这样的话我们就可以开整. 开整条件:国内VPS或者阿里云有CN2线路的机器最好是100MB-200MB的带宽的.保证你爽歪歪.但是Sandy在阿里云HK30MB下也测试了也可以达到30000KB以上,羡慕吧~我们可以开始了! 老规则工具先出: 没被gwf和谐的服务器1台(下文统称:主服务器) 国外服务器2台以上(下文统称:从服务器) nginx 1.9.5版本以上(推荐:lnmp1.4) v2ray croe 第一步: 在 主服务器 安装lnmp1.4,这里就不细说教程了.直接去 官方 看教程 安装完毕以后我们来升级Nginx让他支持stream模块 cd lnmp1.4 vi lnmp.conf 在Nginx_Modules_Options=‘’里面加入--with-stream Nginx_Modules_Options='--with-stream’ 然后执行升级命令 ./upgrade.sh nginx  第二步 修改nginx.conf文件 cd /usr/local/nginx/conf/nginx.conf 在 events { use epoll; worker_connections 51200; multi_accept on; } 下面加入 stream{ server{ listen 0.0.0.0:8080; proxy_pass v2ray_backend; proxy_timeout 10m; proxy_connect_timeout 5000ms; } upstream v2ray_backend{ server ...

Mac下Aria2安装及其配置并设置开机启动

1.安装Homebrew 注:(如已安装,请忽略) 打开终端键入以下命令,等待完成 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.安装最新版本aria2并配置 1.终端下输入以下命令 ➜ ~ brew install aria2 2.等待安装完成后,下载附件 Aria2相关配置下载地址 aria2 config 3.建立aria2文件夹 cd ~ // 创建aria2文件夹 mkdir ~/.aria2 4.打开刚才创建好的aria2文件夹 ➜ ~ open ~/.aria2 5.解压下载好的附件,将 下列文件 复制到aria2文件夹内 aria2.conf aria2.log aria2.session com.aria2c.plist com.google.Chrome.mobileconfig 6.将下载文件夹内的 aria2c 文件复制到 /usr/local/Cellar/aria2/1.33.1/bin 下 操作方式,终端输入命令 cd /usr/local/Cellar/aria2/1.33.1/bin 将该文件夹里的 aria2c 文件重命名为 aria2c.bak,再将下载文件夹内的 aria2c 复制进去 注: 1.理由是官方的 aria2c 版本最多支持16线程,sarkrui改好的aria2c版本支持128线程 2.文中所说的1.33.1是我当前从brew上下载下来的版本,实际以你brew下载下来的版本为准,如果和我版本不一致,请修改相关的1.33.1这个路径 7.右键使用文本编辑或sublime打开 aria2.conf 找到如下语句,将hsuyelin(本人电脑用户名)修改为你电脑的用户,修改完成 command+s 保存退出 #文件保存路径, 默认为当前启动位置 dir=/Users/hsuyelin/Downloads # 日志保存路径 log=/Users/hsuyelin/.aria2/aria2.log # 从会话文件中读取下载任务 input-file=/Users/hsu...

Android 用户必备良药「黑域」,专治「全家桶」唤醒烦恼

显然,这不是广告! 这么好的应用,不分享给尾巴们简直说不过去,于是我决定自己动手写一篇关于「黑域」的简单介绍。 那么在聊「黑域」之前,先说一下国产 Android 应用的尴尬之处。注意,以下信息不一定准确。 众所周知,谷歌服务在国内是被你懂的 XX 所干扰,而 Android 系统的诸多服务没有了这些支持的话就会变成残缺状态。比如推送服务,Android 是和 iOS 一样拥有系统层级的推送服务,这项服务叫做 Google Cloud Messaging,现在新名称是 Firebase Cloud Messaging 。 由于这项服务被干扰,国产 Android 应用如果想要推送消息给用户,通常都会选择「小米推送」、「极光推送」、「个推」等第三方推送服务,为了确保服务的可靠性,他们就得让应用处于运行状态,而非彻底从后台任务中清除。 然后,问题就来了。 国内各大手机厂商们为了确保手机运行的流畅性和稳定性,会选择让系统杀掉那些常驻在后台的应用进程。由于各家手机厂商的系统功能完全不同,杀进程的方法也就都不一样。举个例子,采用「小米推送」服务的 Android 应用在 MIUI 下可以获得最高的消息送达率,即使应用被切到后台也没关系,正常情况下它依然能够收到通知。但如果是在 Flyme OS 的话,当这款应用切到了后台那么很可能它的进程就会被杀掉,导致消息无法正常送达。   ▲ 让人又爱又恨的某些国产应用 为此,这些 Android 应用不得不采取一些措施以确保自家应用的推送通知能够送达用户,于是……噔噔噔!掌声有请「全家桶」登场!随后就…… 一个推送通知直接把多个应用同时唤醒,后台电量哗啦啦下降,机身发热,滑动卡顿……天呐,这简直就是灾难。如果手机厂商不针对这种状况做处理,最终结果可想而知。 当然,你可别以为这些国产应用只是为了推送才要常驻后台,比如自动下载安装包什么的,因为 Google Play 商店没有入华,应用也无法实现自动更新。为了确保用户使用最新版本的应用,常驻后台自动下载安装包什么的 ,呵呵呵。 这就是没有谷歌服务的 Android 在中国大环境下的现状,它显得非常具有中国特色,但本质上它是因为先天性缺陷才造成了今天的局面,是的,这一缺陷不是你光靠科学上网就能改变得了。 说到这里,某些非 Android 用户估计又要觉...