学习&记录

好好学习,天天向上

0%

在 Rocky Linux 9 上安装 Docker 和 Docker Compose 的步骤如下:

1. 更新系统

首先,确保你的系统是最新的:

1
sudo dnf update -y

2. 安装 Docker

2.1 添加 Docker 仓库

Rocky Linux 9 使用 dnf 包管理器,你可以通过添加 Docker 的官方仓库来安装 Docker。

1
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2.2 安装 Docker

1
sudo dnf install docker-ce docker-ce-cli containerd.io

2.3 启动并启用 Docker 服务

1
2
sudo systemctl start docker
sudo systemctl enable docker

2.4 验证 Docker 安装

1
sudo docker --version

你应该会看到类似以下的输出:

1
Docker version 20.10.12, build 20.10.12

3. 安装 Docker Compose

3.1 下载 Docker Compose

Docker Compose 是一个独立的二进制文件,你可以从 GitHub 下载最新版本。

1
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

3.2 赋予执行权限

1
sudo chmod +x /usr/local/bin/docker-compose

3.3 验证 Docker Compose 安装

1
docker-compose --version

你应该会看到类似以下的输出:

1
docker-compose version 1.29.2, build 5becea4c

4. 配置 Docker 用户组

为了方便使用 Docker,你可以将当前用户添加到 docker 用户组中,这样就不需要每次都使用 sudo 来运行 Docker 命令。

4.1 创建 docker 用户组

1
sudo groupadd docker

4.2 将当前用户添加到 docker 用户组

1
sudo usermod -aG docker $USER

4.3 重新登录以应用更改

你需要重新登录以使组更改生效。你可以通过以下命令重新登录:

1
newgrp docker

5. 验证 Docker 和 Docker Compose

5.1 运行一个简单的 Docker 容器

1
docker run hello-world

你应该会看到类似以下的输出,表示 Docker 安装成功:

1
2
3
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

5.2 使用 Docker Compose 运行一个简单的服务

创建一个 docker-compose.yml 文件:

1
2
3
4
5
6
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"

然后运行以下命令启动服务:

1
docker-compose up

你应该会看到类似以下的输出,表示 Docker Compose 安装成功:

1
2
3
4
Creating network "myapp_default" with the default driver
Creating myapp_web_1 ... done
Attaching to myapp_web_1
web_1 | 172.18.0.1 - - [01/Jan/2023:12:34:56 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.1" "-"

创建文件fuclaude.sh文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

PORT=13142
# 如果要设置站点密码
# PASSWORD=自己定义个密码
# 下载 ZIP 文件
# 注意操作系统别下错文件 linux-amd64
wget https://github.com/wozulong/fuclaude/releases/download/v0.3.6/fuclaude-v0.3.6-linux-amd64-71ca469.zip
# 解压 ZIP 文件
unzip fuclaude-v0.3.6-linux-amd64-71ca469.zip

# 进入解压后的目录
cd fuclaude-v0.3.6-linux-amd64-71ca469
# 设置执行权限
chmod +x fuclaude
# 修改 config.json 文件中的 bind 和 signup_enabled、show_session_key 的值
sed -i 's/"bind": "127.0.0.1:8181"/"bind": "0.0.0.0:'"$PORT"'"/; s/"signup_enabled": *false/"signup_enabled": true/; s/"show_session_key": *false/"show_session_key": true/' config.json

执行 ./fuclaude.sh

别忘了开通端口

原文链接

通过执行定时任务,链接ssh进行保活并用日志记录,下面是代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
LOG_FILE="./activelogfile.log"

echo "开始 SSH 连接尝试" | tee -a $LOG_FILE

# 定义一个函数来处理 SSH 连接
function try_ssh_connection {
local server=$1
local user=$2
local password=$3
local label=$4

echo "正在尝试连接到 $server,用户名:$user(连接:$label)" | tee -a $LOG_FILE
timeout 30 sshpass -p $password ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt $user@$server "echo \"Hello from $label\"; date; sleep 10" 2>&1 | tee -a $LOG_FILE
result=${PIPESTATUS[0]}
if [ $result -eq 124 ]; then
echo "错误:$label 连接超时" | tee -a $LOG_FILE
elif [ $result -ne 0 ]; then
echo "错误:$label 连接失败" | tee -a $LOG_FILE
else
echo "$label 连接成功!" | tee -a $LOG_FILE
fi
sleep 3
}

# 调用函数进行 SSH 连接尝试
try_ssh_connection "主机地址" "用户名" "密码" "成功提示"
try_ssh_connection "主机地址2" "用户名" "密码" "成功提示"

echo "所有 SSH 连接尝试已完成。" | tee -a $LOG_FILE
sleep 3
echo "脚本运行完毕,正在退出..." | tee -a $LOG_FILE
sleep 3
exit 0

定时任务设置

可以使用 cron 来实现。以下是具体步骤:

首先使用pwd获取执行文件目录,比如是/root下的active_.sh文件

1. 编辑 crontab 文件

使用 crontab -e 命令编辑当前用户的 crontab 文件。

1
sudo crontab -e

2. 添加定时任务

crontab 文件中添加一行,指定每天早上六点执行 /root/active_.sh 脚本。

1
0 6 * * * /root/active_.sh

3. 保存并退出

编辑完成后,保存并退出编辑器。crontab 文件将被更新,新的定时任务将开始生效。

4. 验证定时任务

使用 crontab -l 命令查看当前用户的所有定时任务:

1
sudo crontab -l

示例

  1. 编辑 crontab 文件

    1
    sudo crontab -e
  2. 添加定时任务

    1
    0 6 * * * /root/active_.sh
  3. 保存并退出
    保存并退出编辑器。

  4. 验证定时任务

    1
    sudo crontab -l

解释

  • 0 6 * * *:表示每天早上六点(06:00)执行任务。
    • 0:分钟(0-59)
    • 6:小时(0-23)
    • *:日期(1-31)
    • *:月份(1-12)
    • *:星期几(0-7,其中0和7都表示星期日)

@XR 原文链接

闪光的生命

刘洋最近一直在埋怨:干嘛不让我早一点碰到雷冰?大学五年里有的是机会嘛。偏偏是在毕业设计最紧张的时候,偏偏那一天去计算机中心,偏偏雷冰坐在机房里──她那么好看!连她的眼镜都好看!还有头发,还有衣服,还有她安安静静坐着的样子。

如果不是毕业设计,刘洋想,那我就天天泡在机房里陪她。可是现在,我只能窝在小实验室造苹果。

他在屋里慢慢地转圈,在他脚步所划的大圆圈里,有一张沙发椅,一个实验台,一台奇型怪状的仪器──叫做复制槽,摆成个三角形。实验台上放着一只又红又大的苹果,完美无缺,现在它是刘洋单相思病的唯一见证了。复制槽那边咝咝作响,正在对苹果进行全息扫描。这就是他的毕业设计课题。

刘洋眼瞪着苹果,脚下绕着圈子,心想:今儿晚上去看她,找什么借口呢?他在事先总爱一个人演习一番──但基本上不能用于实战。

我应该用含蓄的语言赞美她,同时,深情地凝望(但不可过于肉麻)。他自言自语:我就说,又漂亮、又聪明、又有个性的女孩子真是太少啦,最近我倒发现一个。她要问,那是谁?──等一下,她也许不问呢?我看她肯定不问。那我不是自讨没趣吗。我这么说,你歇一会儿,我讲个故事?不行,她不会听,就是想听也装作不爱听。那我就硬讲,把她逗笑为止。我马上夸她:你笑容好动人!她万一不笑呢?我就是说,你板着脸的样子好动人!──是否贱了一点?

正自个儿瞎念叨,蜂鸣器响了。刘洋走到复制槽边,拉开盖子,里面有一个大红苹果:它是照原样复制的,从外到里,连滋味都是一模一样。

刘洋笑了,是那种心怀叵测的笑。他有主意了!

在温柔的夜晚,一位美少年,面带微笑(穿着最亮的皮鞋),手捧苹果,送到姑娘窗下。这是多么浪漫动人的情景!虽然雷冰的窗子在九层楼。

浪漫是要有代价的。从实验大楼到计算机楼很远,而且,计算机楼的电梯和往常一样,就是说又坏了。刘洋爬上九层,呼哧带喘。定了定神,走到那个机房门口,轻轻地推门进去。

里面当然只有雷冰一个人。

“大家好!我又来了。”刘洋装模做样地说。

雷冰心里笑了:这个人!每一次来,屋里明明只我一个,他总说“大家好”,好象所有的机器,连桌椅和地毯里的微生物,都是他朋友。雷冰聪明剔透,她知道这个男孩子,不敢面对她一个人问好,,因为他心有所求,所以怕露痕迹呢。她两眼望着屏幕,也不扭头,说:“又跑来捣乱,今天不许在机子上玩游戏。”

刘洋找一把椅子坐好,问:“你的课题怎么样?”

雷冰说:“你没看见吗,乱七八糟,我头都大了。你一来,我头更大了。”

刘洋跑到她背后,说:“我会叫它小下去的。”双手虚空作发功状,念到:“小,小,小……”

雷冰吃吃地笑了,然后又正正经经地问:“你呢?你那边怎么样?”

刘洋从衣兜里掏出两个苹果,说:“你看!”

雷冰把苹果接下来,摆在桌上,仔细端详,出神地说:“真棒!一模一样!”说完懊丧地摇摇头:“你都快完成任务了,我这儿还没有摸着边儿呢。”

刘洋安慰说:“差得远呢,还没能复制动物,而且,复制的东西都不够稳定,只能存在半个小时。”

“是吗?”雷冰看着苹果,“那,过一会儿就会有一个苹果消失么?”

刘洋笑道:“对!现在你挑一个,看看是真是假?挑着哪个吃哪个啊。”

雷冰摇头笑道:“我不。”

刘洋说:“挑一个嘛,试试你的手气。”

雷冰闭眼拿了一个。

刘洋说:“现在可以吃啦,在半个小时以内,都是真苹果。”

“我不,我要看它怎样分解掉。”雷冰握着苹果说。

“那好,你拿那个,我拿这个,咱们一起等着。”

过了好一会儿,刘洋手上的苹果忽然无声无息地消失了。

雷冰笑道:“我选对啦。我有第六感!”她用修长的手指握住水果刀,把它切成两半,说:“你吃大的一半。”

她很大方,刘洋拿着半个苹果,倒有点儿不知所措了。

雷冰看看他,问:“你干嘛呢?”

刘洋笑道:“我奇怪。以前,我看女孩子吃苹果,都是先用香皂洗一遍手,然后用洗涤剂洗苹果,再用洗涤剂洗水果刀,再用香皂洗手,才削皮,最后用牙齿啄着吃。可不象你这样。”

雷冰笑说:“我从小就是这么吃,习惯了。”

他们俩一起吃完苹果。雷冰说:“如果复制的东西只能存在半小时,那又有什么用?”

刘洋说:“有用啊,特别是对你们女孩子大有用处。”

雷冰问:“为什么?”

刘洋笑说:“你爱吃什么?”

“不告诉你。”

“好吧,假设你爱吃肥肉……”

雷冰抗议说:“我根本不爱吃!”

刘洋说:“行,行,假设你爱吃巧克力,可又怕胖。那好办,你买一块来,我给你复制一大堆。你可以不停嘴地吃,吃到肚子里就消失了,又不用节食,又保持苗条身材!”

雷冰笑道:“就你能想出来,你以为人家都象你一样好吃。”她看看屏幕,又说:“你帮我处理一下这些数据好不好?我手指头都发酸了。”

刘洋说:“行。”他坐在桌边,一边敲键,一边说:“千里迢迢,披星带月来送苹果,不许玩游戏,还得干活……”

“瞎唠叨……”她责备人也总是这么淡淡地。

刘洋说:“你的导师是陈教授吧?他怎么总不来。”

雷冰慢条斯理地说:“他可千万别来,他一来只有一句话:‘雷冰,进度为什么这样慢哪?’我就得特别乖地在这儿熬夜。”

刘洋笑道:“我们王教授还不如他呢!把课题留给我,自己去火星考察了。”

雷冰说:“你一说上火星━━咱们学校旁边的航天实验场,总是抢我们学校的电用。有时候夜里停电,机房里的警铃就响,我最怕那种声音了。”

刘洋笑道:“我还没见过你害怕是什么样……”

雷冰在后面说:“数据都错啦!你就会捣乱……”

苹果换成小白鼠,是一个月以后了。实验很有进展,但是刘洋的爱情冒险迟迟没有开端。他总是演习,总是临阵退缩。

这一回他又绕着小白鼠转圈子,自己描绘一幅与雷冰对话的情景:

首先我要把话题引到容貌方面,说一个人的相貌可以显示她的个性。然后我说:“我猜猜你的个性,好不好?”

雷冰说:“好吧。”

(万一她说“不好”呢?她多半会说“不好”━━她很严肃。那么,我就硬要说。她会无可奈何,然后转过脸去,假装不听。)

我就在她背后说道:“后脑形状也能显示个性,只不过你头发太长,盖住了。”(她的头发很顺滑。)

雷冰会自顾自地敲键盘,装作旁边根本没有我这个人似的。

我说:“先从眼睛说起吧,你的眼睛非常好看(我真敢这么说吗?),很明澈,说明有内在的生命力。你的目光喜欢低垂,说明你怕羞,但又很骄傲(我好大胆!)。鼻子高,有一点儿尖,表示自信、矜持。嘴唇薄,有个性,可是笑起来就很柔和。额头广,说明你聪明、灵透。脸型是瓜子型,柔和、秀气,表明性格文静、温和。头发柔顺光滑,是直的长发,唔……表示朴素,不随潮流,又有一点浪漫。”

雷冰这时很斯文地、慢悠悠地说:“你净瞎说。”哎呀,我真是喜欢她这种柔和的责备口气。

这时候,雷冰不说话,显然已经被触动了。(嘻嘻。)

我抓紧机会,说(一定要很自然地,不经意地):“对啦,我很喜欢你低头的这个样子(我敢说“喜欢”吗?)。还喜欢你掠头发的样子(豁出去了。就是喜欢,谁怕谁?)。还喜欢你笑,你生气,喜欢你这样,喜欢你那样……”

雷冰回过头来,然后……

刚刚演习到“然后”,正在臭美之际,屋里的灯突然熄灭,警铃也响起来。停电了。

刘洋赶忙把所有电闸都拉开,关掉警铃。

忽然想起:雷冰还在机房!别看她有时候凶巴巴的,其实胆量极小,一个人在那里会吓死的。刘洋摸黑找出一盏手提灯。

雷冰正安安静静地坐在桌边,桌上有一盏应急灯。看到刘洋进来,她笑道:“你来啦。”

刘洋说:“来看看你害怕是什么样子。我很失望啊。”

雷冰说:“你就是来看这个的吗?”

刘洋笑道:“对。”帮她去拉电闸。

雷冰坐在那儿,说:“那你走吧,不用你帮忙。”

刘洋一惊,回头看时,她寒着脸,正生气。

刘洋想说:你生气的样子真好看。但毕竟不敢,就坐在一边,有趣地看她。

雷冰又转了个身,没理他。刘洋就绕着她走圈子。

雷冰一笑,道:“你有病啊!”

刘洋笑说:“好了!我逗你一句,你骂我一句,咱们打个平手。”

雷冰说:“突然停电,我一慌就关机了,可能丢了好多数据。”

刘洋哄她说:“没关系,以后慢慢来。陈教授还能不让你毕业吗?反正停电干不成了,我送你回宿舍吧。”不等雷冰说话,又笑道:“快走!慢了就关门!”说完就往门口跑。

雷冰却是一点儿也不起劲,叹了口气,慢慢地站起来,走到门口,笑说:“我知道你不会锁的!”

路上,雷冰说:“刘洋,你应该去搞文艺。”

刘洋问:“为什么?”

“你性子活,而且,你爱幻想。”

刘洋奇怪地问道:“你怎么知道?”

雷冰笑说:“我比你大嘛,能看透你。记着:幻想有时候好,有时候不好。到宿舍啦,再见!”

刘洋自己穷嘀咕:一层窗户纸,轻轻一捅就破,我怎么就不敢呢?刚才雷冰生气,是因为我没说真话。其实,她那么聪明,不用我说她也懂的。可是,据说女孩子喜欢听到表白……

又想:准备好的那些话,一句也没说呀。根本就没机会说,等下次……

离毕业答辩的时间越来越近,现在只有一个月了。小白鼠已经换成大黄狗,刘洋还是刘洋:演习大师。

实验已至收尾阶段,需要作的,只是延长复制体的寿命。刘洋抱着大黄狗,想着雷冰,把狗放在实验台上,按上电钮开始扫描。他已经不愿再绕圈走了,就懒懒地坐在沙发上。时间过得真快呀。他想,还有一个月,大家就要毕业了。那时候各奔东西,不知道还能否见面。他懊悔自己为什么总不敢主动一些,坦白一些。

总是想自自然然地开口,以免尴尬,可是,设想好的场面从来就没有出现。现在怎么办呢,只有一个月了。

不过,一个月还够长,三十天,七百二十个小时呢。这么多个小时里面,难道就没有一个机会?

“没有机会!”

刘洋听到一个声音说。

他吓了一跳!这声音多熟啊。

蜂鸣器响了。复制槽的盖子竟然自己掀开,跳出一个人来!而且,居然就是刘洋自己的样子!

这个人一边跳出来,一边大声说:“你等不来机会,而且你的时间也不多。”

刘洋惊呆了,片刻,他才说:“复制大黄狗,怎么会跳出一个我来?”

那人说:“你心不在焉,把狗放在沙发上,自己坐在实验台上了。”

刘洋一看,可不是,狗正趴在沙发上睡觉。然后,他又吃惊地看着复制人说:“你刚出生,就会说话!”

复制人熟练地整理着实验仪器,平静地说:“当然了,复制么,你整个都被复制了,连衣服、手表,还有所有记忆、性格。我知道你从小到大的所有事,我还知道,我只能存在半小时。”

刘洋兴奋地搓着手,说:“太奇怪了!太奇怪了!我问你几个问题行吗?”

复制人说:“快问,我时间宝贵。”

刘洋一笑,说:“我左腿的疤怎么来的?”

复制人说:“左腿,小时候爬树摔的。那一次真疼,疼哭了。”

刘洋又惊又喜,想了想,说:“刚一出生,就有二十年真切的记忆,是什么感觉?”

复制人说:“非常奇妙,无法言说,好象大梦初醒。”

刘洋问:“你是和我一样的人,知道人世的快乐。你又知道自己只能感受半小时的生命,不觉得不公平?”

复制人淡淡一笑道:“不短了,因为是命里注定。我本不应该出世的,有这半小时,总比没有好。其实,你就算能活一百年,难道就很长么?”他转过身,说:“我要走了,时间宝贵。”

刘洋惊问:“你去哪儿?你不能出去!”

复制人已跑出实验室,把大门从外面反锁了。

刘洋捶门叫道:“你回来!你干什么?”

复制人在门外低声说:“谢谢你!你让我出生,又让我有自己的心!”

跑出实验大楼,门外月光朗照,夜色清明。复制人深深呼吸了一口气,对自己说:“真幸运!我出生在这么美丽的晚上。”看一看手表:还有二十分钟!

他定定神就往学校的后花园跑去,那儿有他要的东西。

一园子的玫瑰,在晚上都静静地睡着。他翻进花园,喘息着伸手──在花圃中立着一面木牌,上写八个字:生命短暂,请爱惜我!

他呆了一呆,一跺脚!

还有希望,学校外面有一个鲜花店,只需翻过院墙就行。

没有灯光。商店锁了门。

他又翻了回来,冲进花园,轻声说:“对不起!对不起!”

那是对玫瑰花说的。他伸手折枝,花枝上的刺扎进肉里,无暇去管,就让血流吧。

折下几枝最繁盛的,抬手看表:还有一刻钟!

他跑!向计算机楼跑,一面跑,一面用手指把花枝上的刺都掰下来。没有时间可以耽误了,一秒钟也不行,只希望电梯是好的。

电梯坏了。

还剩下十分钟!

他冲上楼梯,一阵风似的向上刮去,直到九层。

到九层,双腿都软了。他靠在墙上,喘着,使心跳平静,掏出手绢来擦了擦汗,又用手绢包好流血的手。他要最完美地去见雷冰,不让她看见一点匆忙狼狈的样子。

看表,还有七分钟!

雷冰坐在桌边,心想:刘洋又该来了。

刚刚想到他,门被推开,雷冰不用回头就知道是谁。

“你好吗?”来人说。

雷冰吓一跳──第一次没说“大家好”!她回头一看,那分明是刘洋,和往常一样,笑嘻嘻的,两只手还装模作样的背在身后。只不过,眼睛好亮,坚决地看着她,看得她有点儿心慌意乱……

“时间过得太快啦。”刘洋说话了。

雷冰抬起眼睛,问:“你的课题做不完了吗?”

刘洋说:“不是,我是说生命短暂。”他坐在对面,温柔地注视雷冰,使她又一次低下了头。

刘洋又说:“这一生,我没有时间选择,只来得及做一件事。是我最想做、最重要的一件,就是──爱你。”

雷冰的脸忽地红了。她转过身去,脸色变得仓白,一颗心怦怦乱跳!

刘洋沉默了一会儿,看她那一头长发不再颤抖了,他说:“我不代表别人,只代表我自己说:我爱你。”

雷冰忍不住一笑,小声说:“这种时候,你……你还开玩笑……”

刘洋伸出双手,扳着她的肩膀,让她转过身来,看着她的眼睛。

雷冰脸蛋红红的,她把目光低垂下去,看自己的衣服。忽然又抬起眼睛,和他的目光交汇,她的睫毛湿润而黑密。

这是超越时间之外的一瞬。

刘洋低声说:“我一生下来就喜欢你。你信吗?”

雷冰抿着嘴一笑,说:“口恩,信。”

刘洋看着她眼睛,微微笑道:“你知道小海龟吗?它们一出壳就会往大海里爬。我也是!我从有感觉的一刻起,就在跑,在往你这儿跑。”

雷冰小声说:“你是说缘份。”

刘洋说:“口恩,缘份吧。一辈子这么短,可是能遇到你,真好。”他从背后拿出一束花来,递给雷冰。

那是一束含苞欲放的玫瑰。雷冰双手接过来,抚摩着花枝,看着刘洋用白手绢缠着的手──

她握着他一只手,贴在自己脸上,轻轻叹了口气。

刘洋抚摩着她的头发,说:“我应该给你更多一些。带你去外面看月亮,带你去美丽的地方玩儿,去吃你喜欢的巧克力,应该给你种很多很多花,修一个花园……应该让你一生都快乐,让你一生安宁。可是,我不知道──”

雷冰闭着眼睛,低声道:“我们以后有很多时间啊……”

刘洋叹息一声,微微一笑,问:“你高兴吗?”

雷冰睁开眼睛,笑说:“口恩。”

“我也是。”刘洋忽然紧紧握着她的手,说:“你再把眼睛闭上,好么?”

雷冰把眼睛阖起,睫毛微微颤抖。

刘洋慢慢凑近去,用嘴唇在她的唇上轻轻一碰。

雷冰没有动。刘洋闭了眼,笑道:“轮到你啦。”雷冰伏在他肩上,翘唇一吻。

刘洋叹息说:“真好!我一生都快活,可是这一秒钟最好。”他猛然微微一惊,看一下手表:“要走啦!”

雷冰惊问:“你去哪儿?”

刘洋离开她几步,回过身来,对她微笑着,柔声说:“你别怕!”

然后,他就无声无息地消失在空气里。

最后的声音,似乎还留在空屋中,慢慢,慢慢地消融。

“如果我只有半小时生命,我也会象他那样。”刘洋说,“其实……他说的,就是我想说的话。我们是同一个人啊。”

雷冰说:“不是!他不是替你来说话的,他也不是你的复制品。他就是他自己!”

刘洋抱着头,低声说:“本来,我才是真的!他根本不应该来!他什么也不是──没有名字,没有生命,没有心……他是我偶然造出来的!”

雷冰说:“他有生命!他是活着的!他不属于你……”她呆了一会儿,又自言自语似地说:“虽然只有半个小时……”

刘洋黯然道:“你以后的日子还长,可是他已经消失了,什么也没留下。”

雷冰道:“玫瑰花还在……”她忽然热泪盈眶!看见玫瑰花,她想到:那个人消失了,永远。他从生到死只有三十分钟,他就用这三十分钟,用他整整一生,让我快乐……

刘洋转头看去。在花瓶里,昨夜的玫瑰花沐浴着阳光,已经盛开。

他心里在想:“一百年真的很长吗?”

一、pm2 安装

​npm install -g pm2

二、pm2 常用命令

pm2 start app.js –watch # 当文件变化时自动重启应用
pm2 start script.sh # 启动 bash 脚本
pm2 list # 列表 PM2 启动的所有的应用程序
pm2 monit # 显示每个应用程序的CPU和内存占用情况
pm2 show [app-name] # 显示应用程序的所有信息
pm2 logs # 显示所有应用程序的日志
pm2 stop all # 停止所有的应用程序
pm2 stop 0 # 停止 id为 0的指定应用程序
pm2 restart all # 重启所有应用
pm2 reload all # 重启 cluster mode下的所有应用
pm2 delete all # 关闭并删除所有应用
pm2 delete 0 # 删除指定应用 id 0
pm2 scale api 10 # 把名字叫api的应用扩展到10个实例pm2 reset [app-name] # 重置重启数量
pm2 startup # 创建开机自启动命令
pm2 save # 保存当前应用列表
pm2 resurrect # 重新加载保存的应用列表

唐代现实主义诗人白居易有一篇乐府诗,这首诗没什么名气,但这首诗记述了一件事情。用现代的话说,就是一座城、一个人、一件事。

道州民-美臣遇明主也——白居易
道州民,多侏儒,长者不过三尺余。
市作矮奴年进送,号为道州任土贡。
任土贡,宁若斯,不闻使人生别离,老翁哭孙母哭儿。
一自阳城来守郡,不进矮奴频诏问。
城云臣按六典书,任土贡有不贡无。
道州水土所生者,只有矮民无矮奴。
吾君感悟玺书下,岁贡矮奴宜悉罢。
道州民,老者幼者何欣欣。
父兄子弟始相保,从此得作良人身。
道州民,民到于今受其赐,欲说使君先下泪。
仍恐儿孙忘使君,生男多以阳为字。

前言

白居易是唐朝人,他的诗词不出意外,绝大多数都和唐朝有关。那么一说到大唐,很多人会想起繁华的长安,会想起天可汗李世民,会想起女皇帝武则天。

杨贵妃的霓裳羽衣曲,一舞动天下,玄宗开元盛世,万国来朝,这都是我们后世人对大唐的认知。

长安城繁华富庶,俨然一派天朝上国首都欣欣向荣之气象。忆昔开元全盛日,小邑犹藏万家室。稻米流脂粟米白,公私仓廪俱丰实。如此盛世,自然也是吸引了各国商旅和前来求学的外国学子。

根据记载,长安城内鼎盛时期,外国的商人、使者、留学生、留学僧等外国游子总人数不下3万人。当时来长安与唐通使的国家、地区多达300个。唐的科技文化、政治制度、饮食风尚等由客商、留学生等传播至世界各地。

另外,西方文化通过长安城消化再创造后,又辗转传至周边的日本、朝鲜、缅甸等国家和地区。长安成为世界西方和东方商业、文化交流的汇集地,是当时世界上最大的国际大都会。

如此文化、商业交汇的国际大都会,自然会催生出许多变种,比如人类贸易,通俗点就是奴隶交易。在当时,有名气的奴隶中,属昆仑奴最为有名。昆仑奴是当时的外来客商带来的仆役,由于其忠诚度高,在当时的长安,一个人要是家里有昆仑奴,这都是身份和体面的象征。

但在那时,其实还有名为矮奴的一群人,只不过他们很少被人知悉。因为他们呆在长安城最奢华的地段——大唐皇宫。他们有一个文雅的别称,叫宫廷侏儒优伶,全称宫廷侏儒优伶宦官。

矮奴两字一矮一奴,字面意思解释起来就是矮小的奴仆,文雅点就是侏儒奴,或者奴之侏儒。根据有关文献的记录,矮奴身高不高,且肤色黝黑,与当时的汉人在身高、肤色上有很明显的区别,一眼就能分辨。

这些矮奴是谁呢?他们是道州境内的大唐子民。因为身高肤色有别于常人,在经过一段时间的驯养后,他们就要被当地官府当作贡品,送到皇宫里,去取悦大唐皇族,特别是那位坐在龙椅上的圣人天可汗。

每次送矮奴去长安的时候,道州境内就会哭声遍地。杜甫的石壕吏中,那句夜久语声绝,如闻泣幽咽。其实放在道州百姓身上,也是很贴切的。看着自己的亲人被送往长安,今生今世可能再也不能相见。即便是到午夜时分,也还能听到寂静的夜空中,偶尔响起几声满怀心酸的哭诉之声。

老翁哭孙母哭儿。

从隋炀帝开始,直到大唐德宗废除矮奴制度,这长达一百多年的时间里,道州按时进贡道州境内的百姓,将他们关进笼子里送进长安。一百多年来,延绵不绝。

直到道州来了一位,名为阳城的新任太守。

何为矮奴

阳城刚上任,很快就接到了来自朝廷的诏书,诏书里让他准备好道州的土特产,以便进贡(道州进贡之物,即道州百姓。)

阳城初来乍到,道州又位于南楚之地,距离阳城的故乡和长安都甚远,故而阳城不懂道州有什么有名的特产,于是去问了官府里的其他人。

回答的人没有直接说话,而是将一个很大的陶罐放在阳城面前。阳城一看这罐子,心想原来道州的土特产是陶罐啊。虽然阳城没听说道州的陶罐质量怎么样,但既然能充当贡品,想必也是质量上乘的好东西了。

“大人,错了,这不是我们道州的贡品,放在里面的东西,才是贡品。”

此话一出,阳城脑子里便有了贡酒这个概念,毕竟陶罐里装酒也不奇怪,只是这陶罐这么高大,装酒倒酒也麻烦。
看到阳城的表情,那人从外面带进来一个很矮的侏儒,令侏儒爬进陶罐里。这侏儒虽矮,但阳城可以分辨出,这人年纪不算大。

当阳城看到这侏儒进入陶罐后,身高只比陶罐高一个人头后,忽然明白了什么。

下属官吏对阳城说道“自前朝隋炀帝始,我道州历年来都需进贡矮奴。大人现在所见的,就是我道州的土特产——道州矮奴。”

阳城听完这话,如同天雷轰顶一般。

原来,道州的贡品是当地百姓啊。

“大人,矮奴已经调教好了,如果您没意见,我就去定制笼子,准备进贡了。”

那人见阳城如此惊异,倒也不感觉奇怪。毕竟道州矮奴的进贡时间,已有百余年。道州历任太守,哪个不是第一次听到见到矮奴时,如阳城这般呆如木鸡。可是百余年来,所有的道州太守最后都成为了允许进贡矮奴的那个人。

“我只有一问,陶罐不过数尺,这矮奴如何来的。”阳城从惊异中恢复过来,询问着下属。

“矮奴自然是驯养而来,世上岂有那么多侏儒。历任道州太守,为了升官发财,便从本地捉来健康的儿童放在这种陶罐里。平日里重物压顶,只让孩童露出脑袋,每日教授孩童优伶之术。时日一场,这些孩童自然只有陶罐这般高。

“此法世代相传,已有百余年。历次进贡这些驯养好的孩童时,道州境内都是哭声遍地。这些人进了长安城,能回来的就只能是几缕思乡之魂了。只是不知道,这些孩子是否还认得回家的路。”

“大人!我们听说过您的贤名,如果您真有决心,还请上奏天子,恳请君王降下天恩。道州百姓,必对大人感恩戴德。”

阳城没有丝毫的犹豫,直接拒绝为李唐皇室,继续提供这等非人所为的服务。

“道州水土所生者,只有矮民无矮奴。”

道州土生土养的,都是大唐的子民,他们只是长的矮而而已,而不是什么拿来进贡给君王的物品。

当阳城拒绝送矮奴的消息传到长安后,时任大唐天子的唐德宗,接连下了好几道诏书,让阳城别墨迹,不要违抗天命,矮奴毕竟是祖传了上百年的事情,怎么能随随便便中断进贡呢。

阳城看到皇帝给自己发了数道诏书,内心没有丝毫波动,直接动笔,写了一篇奏折,让御使带了回去。

城云臣按六典书,任土贡有不贡无。道州水土所生者, 只有矮民无矮奴。

阳城的奏折中有句话,叫“州民尽短,若以贡,不知何者可贡。”这句话是标准的反问句,直接反问唐德宗,你到底想要什么。

城出为道州刺史,州产侏儒,岁贡诸朝,城哀其生离;无所进。帝使求之,城奏曰:“州民尽短,若以贡,不知何者可供。”自是罢。——《新唐书·阳城传》

当唐德宗看完阳城写的奏折后,他沉默了一会,宣布中止这种延续了上百年的荒谬之事。自此,道州不再向朝廷进贡矮奴。道州子民再也不用因此而骨肉分离了。

吾君感悟玺书下,岁贡矮奴宜悉罢。

为了让自己享乐,直接拆散别人的家庭,将健康的人折磨成陶罐那么高,这种明显不是为君者该做的事情,竟然延续了上百年。唐德宗虽在史书上评价不高,但此事所为,可称得上是贤明君王。

道州民,老者幼者何欣欣。
父兄子弟始相保,从此得作良人身。
道州民,民到于今受其赐,欲说使君先下泪。
仍恐儿孙忘使君,生男多以阳为字。

直到阳城劝唐德宗放弃这种无意义的事情后,道州的百姓,才第一次知道自己是人,而不是取悦别人的玩物。
从此之后,道州百姓将阳城视作再生父母。

他们再也不用看着自己的孩子被官府抓走,看着孩子被关在瓦罐里,看着孩子登上前往长安的马车。

这首词很短,短到寥寥数笔,就把道州百姓的百余年的苦楚,浓缩成了七个字。

市作矮奴年进送。

但这七个字,也证明的从唐德宗之前的历代皇帝,都默许道州进贡矮奴为自己服务。

一、子查询定义
  定义:

  子查询允许把一个查询嵌套在另一个查询当中。

  子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。

  子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或 者do。

  子查询的位置:
    select 中、from 后、where 中.group by 和order by 中无实用意义。

二、子查询分类
  子查询分为如下几类:
    1. 标量子查询:返回单一值的标量,最简单的形式。
    2. 列子查询:返回的结果集是 N 行一列。
    3. 行子查询:返回的结果集是一行 N 列。
    4. 表子查询:返回的结果集是 N 行 N 列。
  可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS

  一个子查询会返回一个标量(就一个值)、一个行、一个列或一个表,这些子查询称之为标量、行、列和表子查询。

  如果子查询返回一个标量值(就一个值),那么外部查询就可以使用:=、>、<、>=、<=和<>符号进行比较判断;如果子查询返回的不是一个标量值,而外部查询使用了比较符和子查询的结果进行了比较,那么就会抛出异常。

  1. 标量子查询:

    是指子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。 可以使用 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧
    示例:   

1
2
3
4
SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1)
SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)
SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)

  2. MySQL 列子查询:

    指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。
    可以使用 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧
    可以使用 IN、ANY、SOME 和 ALL 操作符,不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。
    示例:

1
2
3
4
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)
SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)

    NOT IN 是 <> ALL 的别名,二者相同。
    特殊情况
      如果 table2 为空表,则 ALL 后的结果为 TRUE;
      如果子查询返回如 (0,NULL,1) 这种尽管 s1 比返回结果都大,但有空行的结果,则 ALL 后的结果为 UNKNOWN 。
    注意:对于 table2 空表的情况,下面的语句均返回 NULL:

1
2
3
4
SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2)
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)
  3. MySQL 行子查询:

    指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。
    例子:

1
2
3
4
SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2)
注:(1,2) 等同于 row(1,2)
SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)

  4. MySQL 表子查询:

    指子查询返回的结果集是 N 行 N 列的一个表数据。
    例子:

1
2
SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)

三、字查询例举
  1. ANY进行子查询

  any关键词的意思是“对于子查询返回的列中的任何一个数值,如果比较结果为TRUE,就返回TRUE”。

  好比“10 >any(11, 20, 2, 30)”,由于10>2,所以,该该判断会返回TRUE;只要10与集合中的任意一个进行比较,得到TRUE时,就会返回TRUE。  

1
2
3
4
5
6
7
8
9
10
11
12
select table1.customer_id,city,count(order_id)
from table1 join table2
on table1.customer_id=table2.customer_id
where table1.customer_id<>'tx' and table1.customer_id<>'9you'
group by customer_id
having count(order_id) >
any (
select count(order_id)
from table2
where customer_id='tx' or customer_id='9you'
group by customer_id);

  any的意思比较好明白,直译就是任意一个,只要条件满足任意的一个,就返回TRUE。

  2. 使用IN进行子查询

  使用in进行子查询,这个我们在日常写sql的时候是经常遇到的。in的意思就是指定的一个值是否在这个集合中,如何在就返回TRUE;否则就返回FALSE了。

  in是“=any”的别名,在使用“=any”的地方,我们都可以使用“in”来进行替换。

  有了in,肯定就有了not in;not in并不是和<>any是同样的意思,not in和<>all是一个意思。

  3. 使用SOME进行子查询

  some是any的别名,用的比较少。   

  4. 使用ALL进行子查询

  all必须与比较操作符一起使用。all的意思是“对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE”。

  好比“10 >all(2, 4, 5, 1)”,由于10大于集合中的所有值,所以这条判断就返回TRUE;而如果为“10 >all(20, 3, 2, 1, 4)”,这样的话,由于10小于20,所以该判断就会返回FALSE。

  <>all的同义词是not in,表示不等于集合中的所有值,这个很容易和<>any搞混,平时多留点心就好了。

  5.标量子查询

  根据子查询返回值的数量,将子查询可以分为标量子查询和多值子查询。在使用比较符进行子查询时,就要求必须是标量子查询;如果是多值子查询时,使用比较符,就会抛出异常。

  6. 多值子查询

  与标量子查询对应的就是多值子查询了,多值子查询会返回一列、一行或者一个表,它们组成一个集合。我们一般使用的any、in、all和some等词,将外部查询与子查询的结果进行判断。如果将any、in、all和some等词与标量子查询,就会得到空的结果。

  7. 独立子查询

  独立子查询是不依赖外部查询而运行的子查询。什么叫依赖外部查询?先看下面两个sql语句。

  sql语句1:获得所有hangzhou顾客的订单号。 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
select order_id
from table2
where customer_id in
(select customer_id
from table1
where city='hangzhou');
  sql语句2:获得城市为hangzhou,并且存在订单的用户。

select *
from table1
where city='hangzhou' and exists
(select *
from table2
where table1.customer_id=table2.customer_id);

  上面的两条sql语句,虽然例子举的有点不是很恰当,但是足以说明这里的问题了。

    对于sql语句1,我们将子查询单独复制出来,也是可以单独执行的,就是子查询与外部查询没有任何关系。

    对于sql语句2,我们将子查询单独复制出来,就无法单独执行了,由于sql语句2的子查询依赖外部查询的某些字段,这就导致子查询就依赖外部查询,就产生了相关性。

  对于子查询,很多时候都会考虑到效率的问题。当我们执行一个select语句时,可以加上explain关键字,用来查看查询类型,查询时使用的索引以及其它等等信息。比如这么用:

1
2
3
4
5
6
7
explain select order_id
from table2
where customer_id in
(select customer_id
from table1
where city='hangzhou');

  使用独立子查询,如果子查询部分对集合的最大遍历次数为n,外部查询的最大遍历次数为m时,我们可以记为:O(m+n)。而如果使用相关子查询,它的遍历 次数可能会达到O(m+m*n)。可以看到,效率就会成倍的下降;所以,大伙在使用子查询时,一定要考虑到子查询的相关性。

  8.相关子查询

  相关子查询是指引用了外部查询列的子查询,即子查询会对外部查询的每行进行一次计算。但是在MySQL的内部,会进行动态优化,会随着情况的不同会 有所不同。使用相关子查询是最容易出现性能的地方。而关于sql语句的优化,这又是一个非常大的话题了,只能通过实际的经验积累,才能更好的去理解如何进 行优化。

  9.EXISTS谓词

  EXISTS是一个非常牛叉的谓词,它允许数据库高效地检查指定查询是否产生某些行。根据子查询是否返回行,该谓词返回TRUE或FALSE。与其 它谓词和逻辑表达式不同的是,无论输入子查询是否返回行,EXISTS都不会返回UNKNOWN,对于EXISTS来说,UNKNOWN就是FALSE。 还是上面的语句,获得城市为hangzhou,并且存在订单的用户。

1
2
3
4
5
6
7
select *
from table1
where city='hangzhou' and exists
(select *
from table2
where table1.customer_id=table2.customer_id);
  

  关于IN和EXISTS的主要区别在于三值逻辑的判断上。EXISTS总是返回TRUE或FALSE,而对于IN,除了TRUE、FALSE值外, 还有可能对NULL值返回UNKNOWN。但是在过滤器中,UNKNOWN的处理方式与FALSE相同,因此使用IN与使用EXISTS一样,SQL优化 器会选择相同的执行计划。

  说到了IN和EXISTS几乎是一样的,但是,就不得不说到NOT IN和NOT EXISTS,对于输入列表中包含NULL值时,NOT EXISTS和NOT IN之间的差异就表现的非常大了。输入列表包含NULL值时,IN总是返回TRUE和UNKNOWN,因此NOT IN就会得到NOT TRUE和NOT UNKNOWN,即FALSE和UNKNOWN。

  10. 派生表

  上面也说到了,在子查询返回的值中,也可能返回一个表,如果将子查询返回的虚拟表再次作为FROM子句的输入时,这就子查询的虚拟表就成为了一个派生表。语法结构如下:

1
FROM (subquery expression) AS derived_table_alias
  由于派生表是完全的虚拟表,并没有也不可能被物理地具体化。

四、子查询优化
  很多查询中需要使用子查询。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死。子查询可以使查询语 句很灵活,但子查询的执行效率不高。

  子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句再临时表中查询记录。查询完毕 后,MySQL需要撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

  在MySQL中可以使用连接查 询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快。

    使用连接(JOIN)来代替子查询
    如:   

例子1:

1
2
3
4
5
6
7
SELECT * FROM t1
WHERE t1.a1 NOT in (SELECT a2 FROM t2 )
优化后:
SELECT * FROM t1
LEFT JOIN t2 ON t1.a1=t2.a2
WHERE t2.a2 IS NULL

例子2:

1
2
SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)

优化后:

1
2
3
4
SELECT * FROM article
inner join blog
on (article.title=blog.title AND article.content=blog.content AND article.uid=blog.uid)

  不能优化的子查询:
  1、mysql不支持子查询合并和聚合函数子查询优化,mariadb对聚合函数子查询进行物化优化;
  2、mysql不支持from子句子查询优化,mariadb对from子句子查询进行子查询上拉优化;
  3、mysql和mariadb对子查询展开提供有限的支持,如对主键的操作才能进行上拉子查询优化;
  4、mysql不支持exists子查询优化,mariadb对exists关联子查询进行半连接优化,对exists非关联子查询没有进一步进行优化;
  5、mysql和mariadb不支持not exists子查询优化;
  6、mysql和mariadb对in子查询,对满足半连接语义的查询进行半连接优化,再基于代价评估进行优化,两者对半连接的代价评估选择方式有差异;
  7、mysql不支持not in子查询优化,mariadb对非关联not in子查询使用物化优化,对关联not in子查询不做优化;
  8、mysql和mariadb对>all非关联子查询使用max函数,<all非关联子查询使用min函数,对=all和非关联子查询使用exists优化;
  9、对>some和>any非关联子查询使用min函数,对<some和<any非关联子查询使用max函数,=any 和=some子查询使用半连接进行优化,对>some和>any关联子查询以及<some和<any关联子查询只有exists 优化。

事实上,当爱的载体从世间消失以后,你才有机会去证明你的爱不是依附,不是索取,也不是逃走。

在我过去的精神病史里,有一个大了我几十岁的病友,在我看来他是一个非常反认知的男人,因为他五十岁出头,却已有长达多年的抗抑郁经历。

对于这样一个依靠药物维持生活的男人来说,他的身体上找不出任何自虐的伤痕,甚至从未有过厌世行为。

坦白讲,就我的阅历而言这很反常。

而我认识他的时候,他妻子已经死了快九年了。

精神病人之间的触及往往是直观且荒诞的,我记得没错的话,我问他的第一个问题就是为什么不去死呢。

这很冒犯,但也很合理。

因为他和他妻子是相爱的,也是丁克族,他们没有孩子,而他的父母亦早早离世,这完全是一种毫无牵挂的状态。

当爱人离开以后,我想不出九年前的那天他为什么不跟着远走的理由。

但他跟我说,他绝对不能死。

其实很难想象一个山东男人能够在成都住了这么多年,在这漫长的时间里,他努力学会了四川话,在家里种着盆栽,每天擦拭着和妻子过去的合照。

倘若你不知晓他卧室里摆放着的那些药罐子,你只会认为这是一位有着积极生活态度的中年男人。

我曾经想过很多个关于诗歌里形容爱情的词汇来作为他活着的理由,但这些都太虚假了,因为他活的很痛苦。

他平静的生活方式下藏匿着暴雷般多年未曾停歇的怄恨,他明明深陷在抑郁中却又要拼命挤出求生欲来竭力挪动自己,现实对于他的取悦远不如脑子里泛着灰尘的婚姻记忆,但他又好像沙漠里唯一的树木,忍着剧痛在现实里扎下密密麻麻的根茎。

一个毫无牵挂的人却停留在真实的土壤上,一个患者在伪装着健康,一段爱失去了载体却依旧被维护。

他很坚强吗,他脆弱到仅仅只是想对我说出妻子的死因便已痛哭到说不出话。

我们一起从郫县坐车到过都江堰,在那里蹲在河边的台阶上抽着烟,风呼啦啦地吹动着我们的衣服和头发,而他妻子的发圈儿就套在他的手腕上。

他扭过头跟我说,自己妻子死了很长的一段时间后,他某天在卧室里翻身坐起来,才忽然意识到他的爱情已经没有了落脚点。

过去他的爱完全地寄托在妻子身上,而当妻子从这个世界上消失以后,他忽然就不知道该怎么去爱她了。

该怎么去爱一个已经消失不见的人呢。

是追溯着回忆去反复地打上鲜艳的烙印来铭记,还是在爱失去承载后奔赴死亡。

可他绝不能死,他像个拥有巨大求生欲的年轻人那样用手夹着燃尽的烟头,脸上流露出某种疲惫的倔强,然后跟我说。

在妻子死后,他从每天的生活里察觉到了他继承了妻子的一部分,那是在他们过去相处时潜移默化流转过来的事物。

他继承了妻子吃火锅的口味,继承了妻子喜欢养猫的习惯,还继承了妻子喜欢听的歌,与许多个下意识的小动作。

伴随着妻子的死去,在她躯壳里的内容已然全部从世间消散了,可她寄存在爱人身体里的那一部分自己还活着,还生动着,鲜活着。

所以他没办法死,他没办法接受这仅剩下的一部分妻子也随着自我生命的消逝而永远告别世界。

他的爱没有失去落脚点。

在那天的傍晚,他低着头踩灭地上的香烟,然后迎着大风走到河边的时候,我几乎以为他就要跳下去了。

可他只是用力地往水面上抛掷着石头,大声地,哽咽地跟我讲,以前他喝醉了就抱着两个人的结婚照流眼泪,然后跟妻子说他其实有多么想死,其实这个世界有多么无聊,其实他活的有多么疲惫。

可他还是不敢死,因为他是妻子生命唯一的继承者。

在妻子死后,在爱永远不会有回应以后,他从来没有这么决绝这么自我地去爱上她,这种爱里没有了期待,没有了索取,也没有了软弱和退路。

但直到今天,他才觉得自己的爱是真的。

我想如果他妻子的魂灵能够随轻盈的晚风飘荡在天空上,大概会红着眼睛擦拭着泪,然后让他别哭。

可是你知道吗,其实我晓得你不会去寻死的,你还有太多的事要做了,自由的死亡有时候比活着更难,其实我知道你想要一个答案,一个可以让自己活的有勇气,能够安心的理由。

而我也不是在歌颂,更不是在指引。

我不是一个讲故事的人,我只是作为一个可以给你这样理由的看客出现。

接下来的漫长的时间里,你有机会去证明你的爱是真实的,你无需强迫自己学会释怀,最终的别离还很遥远,还没有到来。

去践行一种没有依附,没有期许,没有承载的爱是存在的,就像看着那辆细雨中的绿皮火车轰隆隆地驶向远方,然后知道它不会有尽头,也不会有方向。

不要哭,也不要怀疑。

因为去成为另一个人生命的延续,或许也是爱的某种意义。