使用 tail -f 实时观测服务器日志输出

在开发阶段, 有 console 端的输出, 总是可以方便实时地看到应用的日志. 可一旦应用部署到服务器上之后呢, 日志被输出到文件中, 在某些情景下需要不停地查看日志文件的输出以定位某些问题, 此时是否还能像开发那样实时查看日志呢?

答案是可以的! 这个命令就是 tail -f .

tail -f 具体使用例子

来看一个具体的示例, 比如在我的服务器上, 想实时查看下 nginx 访问日志的情况, 我可以进入其日志文件夹, 里面有个 access.log, 每当有请求过来时, nginx 都会往里面记录日志:

nginx access log
nginx access log

然后使用以下的命令实时监测日志变化:

tail -f access.log

之后刷新一下我个人网站的主页, 可以看到日志自动滚动了:

tail -f access.log
tail -f access.log

tail -f 具体含义

首先简要介绍下 tail 命令. 通常日志文件都是比较大的, 而我们感兴趣的最新的日志部分又打印在最后, 而 tail 就是用于查看这些最新输出的日志.

tail 是尾巴, 尾部的意思.

使用 tail --help 查看其帮助:

tail --help -f --follow
tail –help -f –follow

可以看到一个 -f, --follow 的选项, 其含义为:

output appended data as the file grows

当文件增长时, 输出附加的数据

因此, 当当前路径下有一个 console.log 文件, 可以使用以下命令输出其最新的内容:

tail -f console.log

或使用 –follow 完整参数名形式:

tail --follow console.log

停止输出

在调试完成后, 不需要再实时观测时, 可以使用 Ctrl+C 取消命令停止其输出.

什么不是计划(下)

继续先前说到的什么不是计划, 这是下篇

控制数量

在前面说到了两个计划, 运动与节食, 其实, 在一开始, 特别是你以前从未有过非常到位执行计划的经验, 那么并不建议一开始就制定太多的计划. 因此, 这里先考虑运动计划:

哪怕仅靠运动无法达到我们的减肥目标, 但如果能养成一个运动的好习惯, 变成一个灵活的胖子也不赖呀!

计划不宜太多, 特别是在我们没啥经验的情况下. 但制定各类计划之前, 不妨诚恳地问下自己:

以前正儿八经制定过什么计划没有? 自己以前制定的计划都得到良好的执行了吗?

如果答案是否定的, 则制定了太多的计划其实是没有用, 因为它们最终不会得到很好的执行. 所以如果我们并没有成功执行计划的经验, 那唯有从成功执行一个计划开始. 如果我们能很好地执行一个计划, 则再去寻求制定更多的计划.

因此, 这里我们把目光锁定在第一个”运动计划”之上.

计算与算计

很多人一想到运动, 那就会想, 那就去跑步吧, 每天跑步吧! 于是计划变成这样:

在这两个月里, 每天去跑步.

自然, 这依然是个很糟糕的计划. 前面说过目标要量化. 每天去跑步, 这太笼统, 跑 50 米也是跑, 跑 5000 米也是跑, 我们所跑的距离产生的消耗到底能不能达到目标呢? 通过运动方式在两个月减去 5kg 体重, 两个月约 60 天, 折算下来:

5000 ÷ 60 ≈ 80 克/天

也即是每天你平均要减去 80 克的体重, 那么问题就来了: 你到底要跑多长距离呢? 然后, 这个距离你要跑多长时间心里有数吗? 然后, 你安排的执行这个跑步计划的时间足够吗?

认知准备

在前面我们强调了目标要量化, 时间要限定, 为啥呢? 到了前面所说, 估计你已经知道了, 只有这样, 才能去”计算”. 然后我们给出一个问题:

你到底要跑多长距离呢?

这其实不是一个很好的问题, 你是否意识到了呢? 如果你有相关专业的知识, 你就会意识到: 当消耗能量时, 不但要看距离, 还要看强度(简言之, 就是你跑多快), 其实还有一个因素: 你自己目前的体重. 显然, 你越重, 跑得越快, 跑得越远, 你的消耗越大. 这里假定你的体重就是先前目标中假定的 60 kg, 然后假定你能跑到 8分钟/每公里的配速

如果你不知道啥是配速, 那你确实对跑步没多大了解呢!

有了上述的假定, 那么要跑多长距离呢? 我估计你依然是不知道的. 自然, 这还需要你有点营养学, 运动学的知识. 当然了, 现在是互联网的时代, 去网上找找问问, 我相信你能找到答案. 那么, 如果你真有通过运动减肥的打算, 我请你一定要去找到这个答案. 在孙子兵法中, 有这么个说法:

多算胜, 少算不胜, 何况无算?

当然, 你也可以购买一个运动的手表, 录入你的一些个人数据, 然后在运动的过程中开启它, 运动结束后它会给到一个估计的值.

最后, 回到那个要消耗 80g 脂肪的问题上, 到底要跑多远呢? 如果你还是不知道, 我可以给到你一个大概的估计: 慢跑 10 公里(体重 60kg 左右).

是不是有点出乎你的意料呢? 是的, 人体就是这么的节能, 80 克的脂肪就可以驱动一个普通人慢跑 10 公里左右. 而又假设你以一个很慢的速度来跑, 比如 8 分钟/1 公里, 那么光是跑步的纯时间就是 80 分钟, 加上各种准备时间, 来回的时间, 你可能得预留 1.5 ~ 2 小时给这项减肥运动, 然后你才有机会在两个月达成你的目标!

连续两个月每天挤出 1~2 小时去跑 10 公里, 听着是不是很吓人?

很多时候计划为啥会失败呢? 也许是对困难一无所知造成的!

时间安排

很多人制定了计划, 只说要做什么, 但什么时候去做呢? 这个其实也很要紧. 最好是一个固定的时间, 否则很容易早上拖到中午, 中午拖到晚上, 最后就是不了了之了.

说到固定时间, 很多人很容易就想到了早上, 可是我想提醒你: 如果你把计划执行的时间订在早上, 你的计划已经失败了一半! 假如你就是计划早起去运动, 运动难, 早起难, 早起还要去运动? 难上加难, 这样的计划能够顺利执行才怪了. 在寒冷的冬天, 我估计你更愿意躺在舒服的被窝里; 而假如是在夏天呢? 你动一动就是一身臭汗, 运动完后你还得洗个澡, 你确定是否安排了足够的时间呢?

如果让我来建议, 那么我觉得工作日下班后去运动是不错的选择, 而周末或节假日你可以稍微灵活些, 但也还是选择下午好一些.

什么时候可以移到早上去运动呢? 如果你已经到达了这样的境界, 一天里我要是不运动下就觉得很不舒服, 运动已经成为我的日常例行公事, 那么就可以考虑早上去运动了.

耐心

最后, 一份没有耐心的计划则称不上是一个好的计划. 这里所谓耐心有两层含义:

一. 不怕失败, 禁得起反复折腾

你会失败, 你不要放弃, 当然你不可避免要放弃一段时间的, 没有关系, 随时准备重拾你的计划;

你会反复失败, 反复地放弃, 没有关系, 反复地重拾你的计划就好了, 当然了, 争取每次能更快地重新拾起它们.

你可能会把计划视作过于过于神圣的东西, 觉得计划应该不折不扣的执行. 当然了, 能这样执行最好, 但执行不到位, 天不会塌下来, 你可能在这时候犯的另一个错误就是发现计划没有执行好就彻底放弃了. 这真的很可惜, 大可不必这样, 特别是如果你还是一位计划的新手时, 你执行不好一点也不让人意外.

当然, 你也应该坚持一个进步的原则, 虽然你会失败, 会暂时的放弃, 但你失败的次数应该争取越来越少, 放弃的时段越来越短.

二. 拉长时间

一天跑 10 公里听上去太难了, 原因是我们想要在两个月就达成我们的目标. 如果我们把计划拉长到四个月, 那每天只需跑 5 公里了; 如果进一步拉长到八个月呢, 那每天就只需跑 2.5 公里了.

当然, 看到要八个月很多人又要觉得泄气了, 这似乎也太长了. 但其实你观察一下你身边那些超重的亲朋好友同事, 很多人年复一年体重一点也减不了, 甚至不断增长, 你要是八个月能甩掉 5kg, 一年就是 7.5kg, 也就是 15 斤, 两年就是 30 斤, 这其实是个很惊人的成就, 而你所需要的就是耐心.

雄心勃勃的短期计划总是更加地吸引人, 但脱离实际, 无法顺利执行下去又有什么用呢? 记住:

缓慢而持续的进步好过原地踏步!

最后, 以下是一个稍微靠谱的计划:

目标是通过运动削减掉 5kg 的体重; 方式是每天傍晚去跑步 2.5km, 花费半小时左右, 包括准备的时间等; 计划的时长是 10 个月内完成, 如果一切顺利则会在 8 个月内完成, 考虑到天气, 伤病, 各类突发事件等的干扰, 多给出两个月时间作为调整和缓冲.

如何正确地估计自身的实力

制定一个计划时, 很重要的一点就是正确地估计自身的实力.

从主观愿望出发, 我们都想达成一个不错的计划, 但如果不能正确地估计自身的实力, 主观愿望就脱离了客观的实际, 计划还没有开始, 就已经失败了一半. 不能从客观实际出发的计划, 不能算是计划, 而只是个人的妄想.

我们经常可能会觉得计划没有用, 所以没必要去做计划, 反正它最后都不能实现. 其实, 一个符合自身实际的计划是可以被实现的, 而一个妄想则必然会碰壁.

那么怎么去估计自身的实力呢?  就用学英语背单词举例来说吧, 相信多数的年轻人都是学过英语的, 也背过单词. 假如你现在刚毕业, 你掌握了 8000 的词汇量,  如果我们仔细算一算, 中学六年 + 大学四年, 算 10 年吧, 也就是 3650 天左右,  那么过去的平均每一天你也就能掌握 2 个多一点的单词, 而这就是我们的实力.

假如你现在的词汇量只有 6000, 或者你毕业后又过去了几年, 你的词汇量还在原地踏步甚至退步了, 那么平均一天你的实力是可能连一个单词也不到!

从这个实力的现实出发, 就不会轻易高估自己每天能够背诵掌握的单词数目了.

不过有人可能会不服气, 那时又不是专门学英语, 还要学其它科目呢. 那么现在呢, 我们通常也不会专职学习了, 毕竟还要工作呢, 你可能还要带孩子, 处理各种七杂八杂的事, 所以现时的处境可能更为不利.

而又有人可能会想, 那时我没有意识到英语的重要, 没有花很多时间去学, 可是, 十年如果都没有意识到这个重要性, 那么十年之后就会突然觉悟吗? 这恐怕也不是很乐观!

有句话叫”三岁看老”,  一个孩子, 看到他长到三岁, 我们几乎就可以预测他的一生, 这可能有点夸张,  但很多时候, 这种预测也不完全就是武断的, 甚至可能是很可靠的. 如果说三年就能看出一个孩子的一生,  那十年就更不用说了, 形成可靠预期就更加可能了.

如果说十年你都无法意识到英语的重要, 又或者你十年都是对英语有抵触, 不感兴趣, 要知道你那时的任务是全职学习, 你还面临升学, 考证, 毕业等压力, 如果这些都无法促使你学得更多,  那为什么现在就又能学得更多了呢?

当然, 说一天只能学 2 个多点的单词, 也只是承认我们过往的实力, 我们可以在这个基础上逐步的提高.

比如, 在第一个月, 试着每天背两个单词, 看能不能坚持下来, 如果能, 下个月则提到 3 个单词每天, 如果下个月又能做到, 我们又再提高, 这便是从自身实际出发, 循序渐进的原则, 也是我们计划能够成功实施的保证.

而其实, 如果能保持这个每天两个多点单词的水平, 再过个十年, 我们能掌握 16000, 其实也是很不错的了, 而且那时的你或许更需要英语给你助力.

我们经常高估我们一年内可以做到的事, 而又常常低估我们十年可以做到的事. 把时间拉得更长, 看到更久的过去, 我们会变得更谦虚, 而把时间拉得更长, 看到更远的未来, 我们会变得更有耐心.

而耐心, 是一种美德.

什么不是计划?(上)

本来想写什么是计划, 但发现从正面反而有点难写, 所以就从反面来尝试下.

写下来

虽然很多人一到新年总要立很多的 flag, 但是很多人的想法往往只停留在脑海里!
作为一个计划, 你起码得把它正儿八经地写下来吧! 这种写, 可以是写在纸上, 或者写在电脑的文件里.
为什么这很重要呢? 我们的大脑在清醒的时候, 就在不停地产生各种想法, 既然它在某个时候能轻易地产生一个想法(比如新年到来的时候), 也自然很容易在随后的日子里忘记它, 甚至是否定它!
我们应该问自己, 计划真的重要吗? 如果回答是肯定的, 那为啥连写下来都不愿意呢?
如果我们一方面认为计划很重要, 一方面又连正式地写下一份计划都不愿意, 我们的认知与行动之间无疑是矛盾的.
一定要让自己的认知与行为一致, 不要欺骗自己! 如果行动不能跟上自己的认知, 那不如接受一种新的认知:

做一个毫无计划性的人也没啥嘛, 活得随机一点, 自由又惬意, 难道不好吗? 至少可以减少认知与行动不一致导致的各种焦虑与痛苦!

写下来还可以因沉没成本的原因促使我们执行计划, 而不是轻易地放弃计划.
毕竟黑纸白字写在那里, 也是付出了成本的, 怎么能说放弃就放弃呢? 对吧? 反之, 如果就像前面分析的, 既然脑子能轻易产生一个想法, 自然也能轻易地否定它!

还记得咖啡猫所说的那句名言吗: 计划来得快, 去得也快, 没有计划才是永恒的.

其实, 不愿意的一个原因可能是不擅长, 不熟悉, 你其实不知道该怎么去做这件事, 它要你”思考”, 而我们很多时候是害怕思考, 总是想逃避思考的.

因为思考很累, 就像跑步很累那样.

关于这点, 在后面还会继续的探讨.

目标量化

好, 现在假设我们已经写下来了计划, 比如, 我要减肥, 那么, 这算个计划吗?
这不能算, 这可以说是一个愿望, 但还不是一个计划.
计划应该要包含一个清晰的目标, 可以被检查, 被验证的.
比如:

我要减肥, 我现在 60kg, 要减到 50kg.

时限

那么, 到了上述这步, 算是个正儿八经的计划了吗?
依然不算, 我们极端点去假设, 假设到了你生命垂垂老矣的那一天, 你的体重终于到达了 50kg, 请问你算达成了自己的计划吗?
恐怕你自己也不这么认为吧, 或许在生命的最后一年, 你的体重达到了目标, 但在之前的很长一段时间, 你都没有达标.
所以, 计划是应该有时限的, 否则就没有意义了.
好, 那我们调整下我们的计划:

我现在 60kg, 现在是 2020 年 2 月份, 到 2020 年 4 月份, 我要减到 50 kg.

落实的手段

那么, 还是减肥的例子, 计划到了上面的一步, 算是个计划了吗? 依然不能算.
虽然现在计划是写下来了, 也有了具体的目标, 清晰的时限, 但还有一个重大的问题, 怎样才能去达到这个目标呢?
怎么保障计划的执行? 我们现在还缺乏一个落实的手段.
事实上, 如果你真正严肃地做过减肥的计划, 你会发现其实不存在所谓的”减肥计划”这回事.
减肥无非就是开源节流, 要开源, 你可以去抽脂, 可以吃泻药, 可以去运动; 而要节流, 那无非就是控制饮食.
假如不去考虑抽脂吃药等手段, 那么实际上我们要两个计划: 运动计划和节食计划.
双管齐下, 我们的目标可以分解下:

1. 通过运动计划增加 5kg 体重的消耗, 为期两个月
2. 通过节食计划减少 5kg 体重的增长, 为期两个月

一旦分解, 就立马面临一个问题: 这个各 5kg 的分解合理吗? 是 五五分好, 还是四六分好呢? 甚至是三七分, 二八分呢?

另外一个问题, 根据生活的常识, 不难觉察到两个计划间的一个矛盾之处:
如果你运动过就知道, 搞完之后你会很饿! 很可能节食计划就被破坏了, 你还可能发生超量补充.
又或者说, 运动完后, 我稍微多吃一点点犒赏自己, 可是你能清晰的知道你要摄入多少才能不至于抵消运动的消耗乃至超量补充吗?

想到这些问题是不是让你很头疼?

我写起来也很头疼!

所以还是拖延一下, 以后再说吧!

持续行动, 知行合一

这段时间因为疫情原因, 基本上非常的闲. 其实对于我来说, 本来就是很宅的, 有没有疫情其实对我来说影响不是那么的大,  但有了之后, 连必要的亲戚间来往也少了, 所以显得更多时间了.

不知道什么机缘巧合,  大概是想起了弟弟以及自身的成长问题, 又想起了看下 Scalers 老师的<刻意学习> 和 <持续行动>,  结果直接就在电子书平台上看完了, 最后决定还是采取一些实际的行动.

当然, 还有一个原因是我之前从微博上得知 Scalers 老师在带领大家读毛选,  而家里正好有一套很老的毛选, 还是五卷版的, 在家里没事的时候也偶尔翻翻, 这次决定跟随 S 老师一起读了. 所以有时候很多决定也是各种因素综合的结果.

一直说要”知行合一”,  一个道理, 只有做到了或至少决定了去做, 才有资格说自己懂得这个道理.  就像如果你去问很多人, 健康是否重要, 很多人会说, 是很重要. 但你观察他们的行动,  很多人并没有花什么时间去锻炼, 抽烟喝酒这些也不打算戒掉,  那么, 观念跟实际的行为就是矛盾的, 不是合一的.

行动是由我们的观念所指导的, 如果一个人的行动不能体现他的观念, 甚至体现了相反的观念, 我们最好还是从行动反推他的观念, 比如上述的例子, 只能判定”健康很重要”这个道理是没有被很多人知道的, 或者是他们认为他们懂得了这个道理, 但实际是不懂的.

自以为是也是我们经常所犯的一个错误, 因此我们也经常说要”听其言, 观其行”.

没有主题, 随便写写

看到上一篇文章已经是 21 世纪 10 年代的事情, 而现在已经到了 20 年代, 恐怕当初停下来时也未曾想过会停了这么久.

做事情有时也需要一些节奏, 停了太久, 节奏就丢了, 再拾起来就比较的困难了, 想写点什么会感觉笔头特别的生疏.

有时候我们希望停下来, 把事情想清楚再写, 但实际上, 写下来或者不停的写或许才是更好的思考方式. 写作能促进思考, 尤其是深度的思考, 写作是最好的”大脑的体操”!

我们需要不停地锻炼我们的身体, 当然也需要不停地锻炼我们的大脑.

2017 写作总结

总结起来,2017 年的写作只能说是“蛇头蛇尾”,如果算上中间,那就是“蛇头蛇身蛇尾”。

写作的确不是一件容易的事,难怪大家都喜欢“开会”,开会只要说就好了,动嘴要比动手容易,想法也可以不用很成熟,考虑可以不用很周全,毕竟开会就是“讨论”嘛。

但如果决定写点什么,如果是不成熟的想法,或者不周全的考虑,你就会想:“那费那么大劲写下这些不成熟的东西做什么呢?”

写作的背后是思考,特别是有价值的思考,这样你才有动力写下来,写作真正的困难在于首先要形成有价值的思考。

【转】如何掌握所有的程序语言

注:本文转自王垠的博客——当然我在扯淡http://www.yinwang.org/blog-cn/2017/07/06/master-pl


对的,我这里要讲的不是如何掌握一种程序语言,而是所有的……

很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。由于我知道如何掌握“所有”的程序语言,总是感觉这种该学“一种”什么语言的问题比较低级,所以一直没来得及回复他们 😛 可是逐渐的,我发现原来不只是小白们有这个问题,就连美国大公司的很多资深工程师,其实也没搞明白。 继续阅读“【转】如何掌握所有的程序语言”

启用了 CDN 加速

前段时间腾讯云送了半年的免费 CDN 流量,总共 300G 吧,既然是免费的,我就顺手申请了下来,结果仔细一看,还挺多限制的。

比如每个月免费流量 50G,不管你是否用完,到了月底就清零了。我记得当时根本没有仔细看它的条款,申请的时候就是 9 月底,结果申请下来接着就是 10 月份,9 月份的 50G 一个比特也没有用上就作废了~ 继续阅读“启用了 CDN 加速”

表单(form) post 方式提交时的编码与乱码(下)

探讨了表单以 post 方式,enctype 为 multipart/form-data 提交时数据所使用的字符集编码(包含缺省使用页面编码及设置了 accept-charset 时两种情形),包括了上传文件及使用中文文件名时的情况,以及后台的接收处理。

在上一篇中提到,post 方式按 enctype 的不同,分成两种情况,一种是 application/x-www-form-urlencoded,前面已经分析过了,这一篇则讨论剩下的那种:multipart/form-data。

继续阅读“表单(form) post 方式提交时的编码与乱码(下)”