需要用到:定时任务
crontab
和vi编辑器
以及finder
获取文件的路径
finder显示完整路径,后面用到
如图的设置,在命令行输入下面的代码:
defaults write com.apple.finder _FXShowPosixPathInTitle -bool TRUE;
重启后就有效果,对应还原如下:
defaults delete com.apple.finder _FXShowPosixPathInTitle;killall Finder
为什么要这个路径,因为执行程序要这个路径,但发现无法复制,只能自己输入?
不会有这么鸡肋吧,发现有一个更加直接拷贝路径但方法,直接快捷键:
Command + Option + C就复制路径了
vi/vim 的简单使用
因为终端的编辑器是用vi编辑器,不会的小白,可不知道如何进行输入呢。
下面是这次要用到的一些命令。
- 刚刚启动 vi/vim,便进入了命令模式
此时可输入的命令:
i 切换到插入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
- 我们输入
i
,进入输入模式
在输入模式中,几乎跟我们正常使用一下,以下是使用按键
ENTER(回车键) 换行
BACK SPACE(退格键) 删除光标前一个字符
方向键 在文本中移动光标
HOME/END 移动光标到行首/行尾
Page Up/Page Down 上/下翻页
ESC 退出输入模式,切换到命令模式
当我们输入完内容,按ESC
进入命令模式,然后按下 :
(英文冒号)就可以进入底线命令模式保存退出了
- 底线命令模式,按
:
(英文冒号)进入
基本的命令
q 退出程序
w 保存文件
最后按ESC键可随时退出底线命令模式。
重点用crontab
创建定时任务
crontab
是mac自带的。
我们需要用到的关键两个命令:
crontab -l //查看所有crontab 列表
crontab -e //编辑crontab任务,保存退出后自动加到crontab列表中执行
重点是后者,我们在终端输入:
crontab -e
会显示如图:
红色框框就是要使用vi
编辑器进行输入,用上面的教程即可操作。
接着看我们的示例:
15 9 * * python3 /Volumes/TRITY工作/redbooklog.py
这里都是代表上面意思呢?看下图:
所以我们上面那个例子的意思是:每天的9点15分,执行python3 ....
这个命令。
当输入完成后,保存退出。系统自动建立新cron,提示如下:
crontab: installing new crontab
最后我们用下面命令,查询我们刚刚创建的话,是否创建成功
crontab -l
那怎么判定是否执行成功了呢?看下面
crontab
不执行怎么办
经过漫长的一天的等待,结果他不执行,果然是自己to young to simple。想得太简单了。另外一点,他执行是否成功也是不报任何的错误
下面进行自我的检查:
- 首先我们看程序是否执行成功:
在终端输入:
python3 /Volumes/TRITY工作/redbooklog.py
发现没有问题。
- 接着我们就考虑是否是
crontab
不执行呢?
我们找到这片文章:crontab 在mac上不执行问题研究
跟着步骤做下去,发现情况一模一样。关键代码摘录下:
# 定时任务统统由 launchctl 来管理的,看看 cron 任务有没有在里面
sudo launchctl list | grep cron
# 有记录。查看一下启动项的配置
locate com.vix.cron
# 创建一个database
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
# 查看 /etc/crontab 是否存在,文中用ll,我这没有此命令,用下面代替
ls -alF /etc/crontab
# 创建该文件
sudo touch /etc/crontab
- 感觉我们大功告成了,于是又该回之前的代码
15 9 * * python3 /Volumes/TRITY工作/redbooklog.py
这次我聪明,下几个分钟的时间,坐等他执行.....
结果还是不执行?crontab
参数设置错了?查询,没有。到底怎么错了?
- 将两边的代码拆分自我的debug(分别是crontab和python)
测试crontab
是否真的执行,于是下面代码产生:
# 每分钟输出当前时间到time.txt上.
*/1 * * * * /bin/date >> /User/Username(你的用户名)/time.txt
一分钟去看,发现真的有。而且留意到这里的命令也是带绝对路径的:
考虑我们的python
也得带上绝对路径,最后代码改成:
50 16 * * * /usr/local/bin/python3 /Volumes/TRITY工作/python/redbook/redbooklog.py
终于正常执行,终于解决了。
对应python3
路径在哪,看这篇文章:Python2和python3在Mac OS上的安装位置
参考资料:
- Mac终端 vi/vim 的简单使用
- Mac Finder 显示路径和复制路径
- Mac下使用crontab来实现定时任务
- 10 个实用技巧,让 Finder 带你飞
- Linux crontab定时执行任务 命令格式与详细例子
- Mac 下不能停止掉 cron 吗?
- crontab 在mac上不执行问题研究
- Mac终端添加ll等命令