[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的前端如何制作
且听下回分解~


<<:  Day27 - 动态模型 part2 (LSTM with attention)

>>:  Day24 - 在 XState 中的阶层式状态 Hierarchical States

第30天 - 文件审核系统(8)_审核端END

延续昨天要讲的 DS.php https://ithelp.ithome.com.tw/articl...

[Day17] 被检查惹

[ 30 Days of ML Challenge | D03] 今天提供一个文件以及一个练习教材,...

浅谈机器数位

人的科技文明发展始终来自於人性 现今的科技水平已经和以往不同了,以目前的科技水准来说大家都可以有好的...

Day8# Array & Slice(下)

昨天没有写完的 Array & Slice(上) ,今天要来把补完进度。 那我们就开始吧 ─...

机器学习:模型训练架构

分散式运算架构 MapReduce 利用函式语言程序设计的概念,将分散运算分为映射(Map)和归纳...