Mac免密登录服务器下载文件+Mac设置定时任务

简介: Mac免密登录服务器下载文件+Mac设置定时任务

Mac免密登录服务器下载文件+Mac设置定时任务


目录

一、需求

二、问题拆解

1、免密登录服务器

2、在 Mac 上设置定时

3、写定时脚本

一、需求

三妹我想在本机(Mac)上设置个定时任务,为什么不在服务器上设置呢,因为有好多用于分析的 Python 包服务器上没有,而我还没有服务器的装包权限,总之我觉得配置两块定时:一部分在服务器上读取 hive 表生成 CSV 文件,一部分在本机,每天去服务器拉取数据。

二、问题拆解

1、免密登录服务器

既然是想要设置定时任务来完成每天去服务器读取数据,肯定不是我人工每天到时间了去输入密码才能下载数据吧。

所以第一步要解决的问题就是免密登录服务器。

所谓的免密登录,就是要让服务器信任你的机器,不信任时才需要输入密码验证身份对吧。所以我们的入手点就是使用密钥文件,使两台机器建立信任。

步骤1. 配置 Mac

打开 Item2,数据命令:

ssh-keygen -t rsa

目的是生成配对密钥。

注:遇到提示建议一路点回车键即可。

效果如图:

可以看到公钥被存放到的位置(红框标注)。

步骤2. 配置服务器

现在已经获取到Mac 的公钥,下一步就是把 id_rsa.pub 文件复制到服务器上 .ssh 目录下 authorized_keys 文件中。

每台服务器 authorized_keys 文件所在的位置都不一样,有的文章说在  ~/.ssh/ 目录中,我也是尝试了好几种方法才找到,方法可能有点笨,不过好用呀。

那么这个方法就是,同样在服务器执行命令(ssh-keygen -t rsa)生成公钥,这样如果已经存在的话就会提示路径,如果原来不存在,你就执行两遍生成密钥,也会提示你第一次生成密钥的位置。

步骤3. 这样轻轻松松找到了 authorized_keys 的位置之后,执行命令 vim authorized_kyes 把 Mac 的 ssh-rsa 内容复制进去即可。

以上~ 完成了 Mac 免密登录服务器。

2、在 Mac 上设置定时

基本有两种方法,第一种是 crontab,第二种是 Mac 的 schedule jobs using launched 设置定时任务,该方法需要写一个 plist 文件,配置任务的动作、间隔的时间等参数。

我自以为对 crontab 很熟所以使用了方法一,没想到还是遇到了一些坑。

坑一:

执行  crontab -e 时报错:

crontab -e

crontab: installing new crontab

/var/spool/cron/tmp.XXXXFSq8E3: 权限不够

crontab: edits left in /tmp/crontab.HaZsu1

 

坑二:

我查了资料说要使用 lsattr /var/spool/cron/ 命令查看文件使用有特殊属性,再使用 chattr 去掉特殊属性。

可是我的 Mac 里说没有 lsattr :

坑三:

安装 lsattr 命令,brew install lsattr ,然而并没有什么作用。

此时我突然想要去看看 /var/spool 路径下面的文件,居然被我发现了关键 bug:根本没有  cron 文件好嘛。。。

所以我就 mkdir cron,又说我没权限,再执行 sudo mkdir cron,搞定。

神奇的是,此时再执行 crontab -e 命令加入定时任务就畅通无阻了。

虽然觉得不可思议,但是真实太 AMAZING 了。

然而现实告诉我,还是太年轻,接下来还是会遇到 bug。

3、写定时脚本

终于到了写定时脚本这一步,其实就是一个 scp 命令,将服务器的 CSV 文件复制到 Mac。

由于我在服务器上每天生成一个 CSV 文件,并且文件已日期作为后缀,类似于 sanmei_20210226.csv 这样的格式。

所以就涉及到我把读取日期需要加入到 scp 命令中。

之前在服务器上执行过脚本里面带读取日期 $(date +"%Y%m%d"),这样就能获取当前日期了,可我是想要前一天的文件,就是今天获取昨天的文件,这下可难倒我了,怎么执行 date -d yesterday 命令以及其他各种方式都不会,可我在服务器上测试都没问题呀。

然后我发现了雷人的原因:Mac 和 Linux 的 date 不是同一个 date 。

先说结论,在 Mac 上使用 $(date -v-1d +"%Y%m%d") 获取前一天。

最终展示一下定时脚本 myCrontab.sh 中的命令:

scp umecron@xx.x.xxx.xxx:/Data/sanmei_$(date -v-1d +"%Y%m%d").csv /Users/sanmei/data

最后再来点彩蛋:为啥 Mac 和 Linux 的 date 不一样呢?

Mac下的date命令是BSD(Berkeley Software Distribution)系的,Linux下date命令是GNU(GNU's Not Unix)系,二者用法有一些区别。

BSD并不特指任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称。

Mac OS X和iOS实际上基于Darwin,Darwin是BSD其中一个分支。

Mac date 和 Linux date 中获取前一天和获取后一天的写法不同:

Mac 通过 -v 参数,-v-1d 代表前一天,-v-1y 代表上一年

Linux 通过--date参数实现,--date='-1 day' 代表前一天,--date='-1 year' 代表上一年

 

完结撒花~~~

相关文章
|
12天前
|
存储 安全 网络安全
服务器设置了端口映射之后外网还是访问不了服务器
服务器设置了端口映射之后外网还是访问不了服务器
|
6天前
|
SQL 弹性计算 安全
通过阿里云的活动购买的云服务器,后续购买并挂载云盘、设置密码及安全组教程
现在大多数用户购买阿里云的云服务器通常都是通过阿里云的活动来购买,这种购买方式主要是价格更实惠,且购买流程简单,但是选购活动中的云服务器,一般只有系统盘,没有数据盘,这需要我们在购买之后单独购买并挂载云盘作为数据盘,而且云服务器的密码和安全组等基础设置也是需要在购买之后再设置的。本文为大家介绍后续购买并挂载云盘、设置密码及安全组的相关教程,以供参考。
通过阿里云的活动购买的云服务器,后续购买并挂载云盘、设置密码及安全组教程
|
11天前
|
Java
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
|
10天前
|
运维
软件开发常见流程之下载安装宝塔,一台服务器安装一次,多台就重复这个步骤
软件开发常见流程之下载安装宝塔,一台服务器安装一次,多台就重复这个步骤
|
12天前
|
缓存 Linux 开发工具
centos设置ntp服务同步目标服务器时间
【7 月更文挑战第 1天】linux+centos设置ntp服务同步目标服务器时间
|
13天前
|
NoSQL 算法 Linux
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
15 0
|
15天前
|
消息中间件 Serverless 网络性能优化
消息队列 MQ产品使用合集之客户端和服务器之间的保活心跳检测间隔是怎么设置的
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
28天前
|
域名解析 存储 弹性计算
云服务器 ECS产品使用问题之快照服务如何设置定时备份以及定时删除
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
1月前
|
应用服务中间件 开发工具 nginx
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端 最近换了台新 Mac,所有的配置和软件就重新安装下,顺便写个文章。
108 1
|
1月前
|
应用服务中间件 Shell nginx
mac m1笔记本docker 安装nginx
mac m1笔记本docker 安装nginx
97 4