iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
自我挑戰組

BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務系列 第 28

[Day 28] 第二主餐 pt.4-程式不求人,runserver背景執行及crontab自動執行

上一篇跟上上一篇我們終於分別把兩個環境架設好了
這篇我們就要來介紹如何在背景執行runserver
以及如何使用crontab啦
廢話不多說,咱們累狗~

背景執行 - console離線,django不離線

首先我們一樣先來看我們的aws位址
可以看到現在django是處於關閉狀態

接著我們進入aws的console
然後進入django資料夾,輸入以下指令:

screen -d -m python3 manage.py runserver 0.0.0.0:8000


從十幾天前就跟你講過了,Python很內向的,成功了也不會跟你說的
不過成不成功再輸入一次url就知道了

這次就成功連上線啦

那如果要把這個django殺掉也很簡單
我們先找出執行剛剛command的process
輸入以下指令

ps aux | grep -i manage


就可以看到我們剛剛執行的process id叫51736
所以我們只要砍掉這個process就好了
輸入以下指令

kill -9 51736


指令就成功刪除啦

自動執行 - 你會忘記執行程式,但crontab不會

接下來我們就要來講一下如何讓你的django自動執行function啦
其中django有一個非常好用的套件叫做django-crontab
這個東西下載下來,設定好格式,就會幫你自動執行function了
首先我們先在aws下載django-crontab

pip3 install django-crontab


毫無問題

接下來我們要來修改setting.py內的東西啦
首先先將INSTALLED_APPS的東東加上'django_crontab'
這個套件加上去時,執行manage.py就會自動幫你加上去了
此時你的INSTALLED_APPS應該會像這樣

INSTALLED_APPS = [
    'django_crontab',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'stonks_index'
]

接下來是設定CRONJOBS啦
我們先在stonks_index/views.py加上以下程式碼

#測試crontab用
def corn_job():
    print("This is cronjob test")

畢竟是測試用的就不要加太多東西啦
然後我們回到settings.py,把這個function加上我們的CRONJOBS排程
由於預設是沒有這個欄位的,所以我們要額外自己加上去

CRONJOBS = [
    ('45 * * * *', 'stonks_index.views.corn_job'),
]

先來講講第一欄的東東是啥意思
crontab會分成五個部分,分別是分 時 日 月 周
每格可以設定的參數有:
*: 每個段落都會執行
a-b: 每個段落的a時間點開始到b時間點結束的每個單位都會執行
a: 在每個段落的a時間點執行
*/n: 每段落每隔n單位執行
a-b/n: 每個段落的a時間點開始到b時間點結束每格n單位執行
這樣講有點籠統,來幾個實際的範例好了
*/30 * * * *:每個月每天每30分鐘執行
30 12 1 */3 *:每三個月1號的12:30執行
0 0 * * 1-5:每個月每周一到週五的0點0分執行
當然還有一些比較複雜的情況
可以用下面的網址來看一下每個設定的結果如何
https://crontab.guru/
那麼根據這個規則
上面的45 * * * *就代表著每天每小時在45分時執行
執行的東西就是後面的stonks_index資料夾內views檔案中的corn_job function
以上全部設定完之後,就可以commit上去啦

接著進到aws,把剛剛的code pull下來
然後執行python3 manage.py crontab add

可以看到我們剛剛設定的cronjob就加入到crontab內啦
然後我們可以輸入python3 manage.py crontab show

可以看到有job在crontab內就是成功啦
那要如何確定有cronjob到底有沒有執行成功呢

我們可以去我們的log看
log的位置在 /var/log/syslog這邊
所以我們就打開看看吧

vi /var/log/syslog

(這裡為了截圖方便,所以我把設定改成12分發送)

那如何刪除cronjob呢,也很簡單
輸入指令

python manage.py crontab remove


這樣就把cronjob清空啦

以上就是背景執行跟自動執行cronjob的部分
下一篇我們會進入最後的一篇主菜
我們要來補上我們的index頁面,讓我們進入時不要每次都顯示找不到頁面
想知道django的前端如何製作
且聽下回分解~


上一篇
[Day 27] 中場休息 - 換邊發球,heroku佈署完整步驟
下一篇
[Day 29] 第二主餐 pt.5-django也能寫前端,templates簡易介紹
系列文
BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務30

尚未有邦友留言

立即登入留言