用 hexo 一段时间了, 主要就是写写刷题心得和自己学习过程, 算是自己给自己写的 reference.

不幸的是前一段时间写了好多 draft, 然后其中一篇有 syntax error, 导致 hexo g 就是过不了. 在几十篇帖子里二分查找真是’爽’啊! 于是我就想到了很早之前就已经关注到的 hexo 自动部署 solution.

网上很容易找到的 solution 的思路都是把自己 source 里面的一些文件包括文章啊, 可能还有 theme 什么的放到 github 另一个 branch, 然后通过 webhook 监听, 如果有变动就执行 hexo g -d, 大概就是这样子. 由于我不太想把自己的源代码都放到另一个 branch 上(万一想加个密啥的呢), 所以这个 solution 显然不是我能用的 solution.

于是我在网上找, 发现linux 有个叫 crontab 的定时执行程序, 于是我的思路来了, 为什么不定时执行 python script 来执行 hexo g -d 这条命令呢? (后来在网上查到早有人已经写了, 但是没给放代码, 帖子后面会放上我写的 script)

这篇帖子我就来说说我写这个 script 的时候遇见的坑.

思路 Link to heading

通过 crontab 定时执行 python script, 达到自动执行 hexo g -d 的目的.

Link to heading

file 还是 logger? Link to heading

开始我在代码里面写的是, 打开一个 file, 然后执行 generate 函数和 deploy 函数, 把其中的outserrs 写到 file 里面. 但是这样在 crontab 里面执行几次发现 file 里面什么都没有. 我到现在也没有明白为什么东西写不到 file 里面. 但是 anyway, 我先一篇帖子说应该用 logger, 所以就用了 logger. 这样想要记录的内容就顺利的被记录了.

hexo not a file or directory error Link to heading

这说明 python 根本没有找到 hexo 这个可执行的东西. 但是我明明在 terminal 就是能运行的. 原因是 crontab 不知道我们所处的环境, 它用的环境可能不够全. 所以在 terminal 里面执行 echo $PATH, copy 所有 path, 然后 crontab -e 加到最上头.

不知道 crontab 执行没有 Link to heading

有的时候不知道我是不是成功的执行了 crontab. 我就在 crontab 里面加上一条比如每分钟在同样的 log 文件里面写上"hello"的语句. 又或者 crontab 写的是对的, 脚本里面有错. 这里提醒一下, crontab 中执行脚本, 脚本里面的路径必须是绝对路径, 包括执行一些系统命令也要给绝对路径.

结语 Link to heading

  • script 的 地址 奉上. 把 script 放在 hexo 主目录, 更改两个 const 就可以了.
  • 不要忘记按照自己的喜好配置crontab. 记得在 crontab tasks 前面加上 path, 避免运行不了 hexo.

have fun~

credit Link to heading

  1. write python output to file in cronjob
  2. Hexo 博客实现自动更新
  3. macos crontab 定时任务配置
  4. osx 添加定时任务