不過大部分手機鬧鐘都不支持這種以小時為單位的周期鬧鈴。所以,我以前每次都是都手動調整鬧鐘時間。總感覺有點 Low!於是,我就寫了個簡單的發郵件的 Lua 腳本,放到樹莓派上作為一個shell命令使用;然後在每周一到周五的9點至23點整點各執行一次發郵件的操作。郵件是發到了我的 QQ 郵箱。收到QQ郵... ...
背景介紹
我有一個習慣,定鬧鐘每隔60分鐘左右,提醒自己休息一次。我發現自己有時候長時間思考,很容易拘泥於細節之中。適當的簡單休息過後,往往會對正在解決和處理的問題有新的認識和發現,有事半功倍的奇效。
不過大部分手機鬧鐘都不支持這種以小時為單位的周期鬧鈴。所以,我以前每次都是都手動調整鬧鐘時間。總感覺有點 Low!於是,我就寫了個簡單的發郵件的 Lua 腳本,放到樹莓派上作為一個shell命令使用;然後在每周一到周五的9點至23點整點各執行一次發郵件的操作。郵件是發到了我的 QQ 郵箱。收到QQ郵件後,左上角會有一個通知懸浮窗,體驗比手機的震動聲好了很多。
另外,之所以會選擇使用 Lua 語言,只是最近自己剛好在看 Lua 而已,用其他語言也是可以的。
在樹莓派上配置必要的 Lua 環境
安裝 LuaJIT
樹莓派的 debian 官方推薦定製系統,內置有 Lua 5.1.5.但是 LuaJIT 使用了 JIT 技術,執行效率更高,所以更推薦安裝和使用。LuaJIT 對應的也是 Lua 5.1 的語法。
你可以在 LuaJIT 下載頁 右鍵查看最新的 LuaJIT 穩定版本,然後參照執行:
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar xzf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5
make && sudo make install
驗證是否安裝成功,請執行:
luajit -v
安裝成功,會輸出:
LuaJIT 2.0.5 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
安裝 luarocks
luarocks 是 Lua 的包管理工具。在樹莓派上需要從源碼安裝 luarocks 。這需要一些技巧。
你可以到 luarocks下載頁 查看最新的luarocks版本,然後參考執行以下命令:
wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.3.tar.gz
tar xzf luarocks-2.4.3.tar.gz
cd luarocks-2.4.3
luarocks 在編譯前,需要先進行配置。完整的配置內容,參見:Customizing your settings。基於 LuaJIT 的配置命令如下:
./configure --lua-suffix="jit"
然後編譯安裝:
make build
sudo make install
驗證是否安裝成功:
luarocks
安裝 luasocket
luasocket 這個庫,下麵的代碼會用到,需要提前安裝下。 如果 luarocks 安裝成功,那其他的 lua 庫安裝就非常簡單了:
sudo luarocks install luasocket
簡單的 Lua 腳本: 發送郵件提示自己註意休息
新建一個 rest_reminder.lua 文件
vi rest_reminder.lua
然後輸入以下 Lua 代碼:
#!/usr/bin/env luajit
local smtp = require("socket.smtp")
from = "[email protected]" --發件人
--收件人列表
rcpt = {
"[email protected]"
}
mesgt = {
headers = { -- 只是文字顯示內容.
to = "[email protected]", --收件人
subject = "請休息五分鐘!" --主題
},
body = "您已連續思考一小時,請先休息五分鐘吧!"
}
r, e = smtp.send{
from = from,
rcpt = rcpt,
source = smtp.message(mesgt),
server = "smtp.example.com",
user = "[email protected]",
password = "username_pwd"
}
if not r then
print(e)
else
print("發送成功!")
end
如果你想實現一些更複雜的操作,最好在常用電腦上配置一個 Lua 完整的開發環境。
想要文件能執行當做命令執行,還需要給文件添加可執行許可權:
chmod +x ./rest_reminder.lua
測試代碼是否有效:
./rest_reminder.lua
正常執行的話,你的收件人郵箱(或郵件垃圾箱),應該會收到一封郵箱。
註意:
- headers 中的收件人會顯示在郵件頭,但是真正決定發送給誰的是 rcpt
- smtp.example.com 要改為發信郵箱的 smtp 伺服器。
- **[email protected]** 和 username_pwd 要改為真實的郵件用戶名和密碼
- 部分郵箱的 smtp 功能,可能需要單獨開通。
使用 crontab 來定時執行
crontab 簡單實用,如果不是很熟悉,可以把它簡單當做一個高度自定義的定時器。
假設腳本的完整路徑是 /home/pi/task/rest_reminder.lua 。
執行:
crontab -e
在打開的內容區末尾新增:
00 9-23 * * * /home/pi/task/rest_reminder.lua
保存退出,正常應該會看到提示:
crontab: installing new crontab
此時,我們的定時腳本已經生效了。即使重啟電腦,這個腳本依然可以正常定時執行。
crontab 藉助於 cron 服務。在必要時,你可以使用 sytemed 的命令來操作 cron 服務:
# 查看狀態
sudo systemctl status cron
# 激活服務
sudo systemctl enable cron
參考文檔
- 【LuaJIT版】從零開始在 macOS 上配置 Lua 開發環境
- Installation instructions for Unix
- Lua smtp
- Linux 下執行定時任務 crontab 命令詳解
- crontab 使用實例
- 強大的crontab