Linux(13):例行性工作排程

例行性工程

听谓的排程是将工作安排执行的流程之意。
Linux 排程就是透过 crontab 与 at 这两个东西。

两种工作排程的方式:
一种是例行性的,就是每隔一定的周期要来办的事项;
一种是突发性的,就是这次做完以后就没有的那一种;

at: at 是个可以处理仅执行一次就结束排程的指令,不过要执行 at 时,必须要有 atd 这个服务的支援才行。在某些新版的 distributions 中, atd可能预设并没有启动,那么 at 这个指令就会失效。不过CentOS预设是启动的;
crontab: crontab 这个指令所设定的工作将会循环的一直进行下去。可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab来支持。至于让 crontab 可以生效的服务则是crond这个服务。

有点像仅一次的闹钟和重复的闹钟。。。。

CentOS Linux系统上常见的例行性工作

基本上 Linux 系统常见的例行性任务有:
进行登录档的轮替(log rotate):
Linux 会主动的将系统所发生的各种信息都记录下来,这就是登录档。由于系统会一直记录登录信息,所以登录文件将会越来越大。我们知道大型文件不但占容量还会造成读写效能的困扰,因此适时的将登录文件数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效的记录登录信息。这就是 logrotate 的任务,也是系统必要的例行任务;
登录文件分析 logwatch 的任务:
如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误信息都会被记录到登录文件中,因此系统管理员的重要任务之一就是分析登录档。但不可能手动透过 vim等软件去检视登录文件,因为数据太复杂了。CentOS 提供了一只程序【 logwatch 】来主动分析登录信息,所以会发现, root 老是会收到标题为 logwatch 的信件,那是正常的。
建立 locate 的数据库:
该指令是透过已经存在的文件名数据库来进行系统上文件名的查询。文件名数据库是放置到 /var/lib/ mlocate/ 中。问题是,系统的例行性工作,会主动的进行updatedb 这个数据库。
man page 查询数据库的建立:
与 locate 数据库类似的,可提供快速查询的 man page db也是个数据库,但如果要使用 man page 数据库时,就得要执行mandb才能够建立好。而这个man page数据库也是透过系统的例行性工作排程来自动执行的。
RPM 软件登录文件的建立:
RPM 是一种软件管理的机制。由于系统可能会常常变更软件,包括软件的新安装、非经常性更新等,都会造成软件文件名的差异。为了方便未来追踪,系统将文件名作个排序的记录。有时候系统也会透过排程来帮忙RPM 数据库的重新建置。
移除暂存档:
某些软件在运作中会产生一些暂存档,但是当这个软件关闭时,这些暂存盘可能并不会主动的被移除。有些暂存盘则有时间性,如果超过一段时间后,这个暂存盘就没有效用了,此时移除这些暂存盘就是一件重要的工作。否则磁盘容量会被耗光。系统透过例行性工作排程执行名为 tmpwatch 的指令来删除这些暂存档呢!
与网络服务有关的分析行为:
如果有安装类似 WWW 服务器软件(一个名为 apache 的软件),那么Linux系统通常就会主动的分析该软件的登录文件。同时某些凭证与认证的网络信息是否过期的问题,Linux 系统也会进行自动检查。

仅执行一次的例行性工程

atd 的启动与 at 运作的方式

要使用单一工作排程时,Linux系统上面必须要有负责这个排程的服务,那就是 atd。不过并非所有的Linux distributions都预设会把他打开的,所以呢,某些时刻必须要手动将他启用才行。
在这里插入图片描述

at 的运作方式:
既然是工作排程,那么应该会有产生工作的方式,并且将这些工作排进行程表中。
使用 at 这个指令来产生所要运作的工作,并将这个工作以文本文件的方式写入/var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了。

可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。加上这两个文件后,at 的工作情况是这样的:
1.先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
2.如果 /etcl/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用at ,
而没有在这个at.deny文件中的使用者,就可以使用 at;
3.如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。

运行单一工作排程

at [-mldv] TIME
at -c 工作号码

在这里插入图片描述事实上,当我们使用 at 时会进入一个 at shell 的环境来让用户下达工作指令,此时,建议最好使用绝对路径来下达你的指令,比较不会有问题。由于指令的下达与 PATH 变量有关,同时与当时的工作目录也有关连(如果有牵涉到文件的话),因此使用绝对路径来下达指令,会是比较一劳永逸的方法。

为什么呢?举例来说,在/tmp 下达【at now】然后输入【 mail -s “test” root <.bashrc 】,那个.bashrc 的文件会是在哪里?答案是【/tmp/.bashrc】 。因为at 在运作时,会跑到当时下达 at 指令的那个工作目录的缘故。

终端机当然看不到任何信息:因为 at 的执行与终端机环境无关,而所有 standard outputl/standard error output都会传送到执行者的 mailbox去了。(有办法看到,【echo “内容”>/dev/tty1(终端机)】)

由于 at 工作排程的使用上,系统会将该项 at 工作独立出 bash 环境中,直接交给系统的 atd 程序来接管,因此,下达了at 的工作之后就可以立刻脱机了,剩下的工作就完全交给 Linux 管理即可。所以如果有长时间的网络工作时,使用 at 可以免除网络断线后的困扰。

at 工作的管理
在这里插入图片描述
atd 可以查看
atrm (jobnumber) 可以移除

batch:系统有空时才进行背景任务
batch 是利用 at 来进行指令的下达,只是加入一些控制参数而已。
batch 在CPU的工作负载小于 0.8 的时候,才进行所下达的工作任务。
工作负载的意思是:CPU 在单一时间点所负责的工作数量。不是CPU 的使用率。
举例来说,如果有一只程序他需要一直使用 CPU 的运算功能,那么此时CPU 的使用率可能到达100%,但是CPU的工作负载则是趋近于【1】,因为CPU仅负责一个工作。如果同时执行这样的程序两支,CPU 的使用率还是100%,但是工作负载则变成2了。
当 CPU 的工作负载越大,代表 CPU 必须要在不同的工作之间进行频繁的工作切换。

使用 uptime 可以观察到1,5,15分钟的【平均工作负载】量
在这里插入图片描述

循环执行的例行性工程

相对于 at 是仅执行一次的工作,循环执行的例行性工作排程则是由 cron (crond)这个系统服务来控制的。Linux系统上面原本就有非常多的例行性工作,因此这个系统服务是默认启动的。

使用者的设定

crontab 的使用的限制数据有:
./etc/cron.allow: 将可以使用 crontab 的账号写入其中,若不在这个文件内的使用者则不可使用crontab;
./etc/cron.deny:将不可以使用 crontab 的账号写入其中,若未记录到这个文件当中的使用者,就可以使用crontab。

当用户使用 crontab 这个指令来建立工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以账号来作为判别的。
举例来说, feng 使用 crontab 后,他的工作会被纪录到 /var/spoolcron/feng 里头去。但请注意,不要使用 vi 直接编辑该文件,因为可能由于输入语法错误,会导致无法执行 cron 。另外, cron 执行的每一项工作都会被纪录到/ var/log/cron 这个登录档中,所以如果 Linux不知道有否被植入木马时,也可以搜寻一下/var/log/cron这个登录档。

crontab [-u username] [-l|-e|-r]

在这里插入图片描述预设情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达【crontab -e】去编辑自己的例行性命令了。整个过程就会进入vi 的编辑画面,然后以一个工作一行来编辑,编辑完毕之后输入【:wq 】储存后离开 vi 就可以了。
每项工作(每行)的格式都是具有六个字段,这六个字段的意义为:
在这里插入图片描述周的数字为0或7时,都代表【星期天】的意思。

辅助字符:
在这里插入图片描述

系统的配置文件:/etc/crontab,/etc/con.d/*

如果是【系统的例行性任务】时,可以编辑 /etc/crontab 这个文件就。有一点需要特别注意,【crontab -e】这个【crontab】其实是 /usr/bin/crontab 这个执行档,但是 /etc/crontab 是一个【纯文本档】。可以root 的身份编。

基本上,cron 这个服务的最低侦测限制是【分钟】,所以【cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron里面的数据内容】,因此,只要编辑完 /etc/crontab 这个文件,并且将他储存之后,那么、cron的设定就自动的会来执行了。

在 Linux 底下的 crontab 会自动每分钟重新读取一次 /etc/crontab 的例行工作事项,但是某些原因或者是其他的Unix系统中,由于 crontab 是读到内存当中的,所以在修改完 /etc/crontab之后,可能并不会马上执行,这个时候需要重新启动crond 这个服务【systemctl restart crond】

在这里插入图片描述
MAILTO=root:
这个项目是说,当 /etc/crontab 这个文件中的例行性工作的指令发生错误时,或者是该工作的执行结果有 STDOUT/STDERR 时,会将错误讯息或者是屏幕显示的讯息默认的由系统直接寄发一封mail 给root 。
PATH=…:
执行文件路径:输入执行文件的搜寻路径。
【分时日月周身份指令】七个字段的设定
这个 /etc/crontab 里面可以设定的基本语法与 crontab -e 不太相同。前面同样是分、时、日、月、周五个字段,但是在五个字段后面接的并不是指令,而是一个新的字段,那就是【执行后面那串指令的身份】为何。这与使用者的 crontab -e不相同。由于使用者自己的 crontab并不需要指定身份,但 /etc/crontab 里面当然要指定身份。系统默认的例行性工作是以 root的身份来进行的。

crond 服务读取配置文件的位置
一般来说,crond预设有三个地方会有执行脚本配置文件,他们分别是:
/etc/crontab
/etc/cron.d/*
/var/spool/cron/*

这三个地方中,跟系统的运作比较有关系的两个配置文件是放在 /etc/crontab 文件内以及 /etc/cron.d/* 目录内的文件,另外一个是跟用户自己的工作比较有关的配置文件,就是放在/var/spool/cron/里面的文件群。

在这里插入图片描述
上面表格中提到的最后一行,每个整点的一分会执行【run-parts /etc/cron.hourly】。
什么是run-parts? 如果去分析一下这个执行档,会发现他就是 shell script,run-parts 脚本会在大约 5 分钟内随机选一个时间来执行 /etc/cron.hourly 目录内的所有执行文件。因此,放在 /etcl/cron.hourly/ 的文件,必须是能被直接执行的指令脚本,而不是分、时、日、月、周的设定值。

总结

个人化的行为使用【crontab -e】:如果是依据个人需求来建立的例行工作排程,建议直接使用 crontab -e来建立工作排程较佳,这样也能保障自己的指令行为不会被大家看到(/etc/crontab 是大家都能读取的权限);
系统维护管理使用【vim /etc/crontab】:如果这个例行工作排程是系统的重要工作,为了让自己管理方便,同时容易追踪,建议直接写入/etc/crontab较佳。
自己开发软件使用【vim /etc/cron.dnewfile】:如果想要自己开发软件,那当然最好就是使用全新的配置文件,并且放置于/etc/cron.d/目录内即可。
固定每小时、每日、每周、每天执行的特别工作:如果与系统维护有关,还是建议放置到 /etc/crontab 中来集中管理较好。

注意事项:
1.资源分配不均的问题
如果每个工作流程都在同一个时间启动的话,那么在某个时段时,系统会变的相当的繁忙,所以,这个时候就必须要分别设定。
2.取消不要的输出项目
另外一个困扰发生在【当有执行成果或者是执行的项目中有输出的数据时,该数据将会 mail 给MAILTO 设定的账号】,当有一个排程一直出错(例如 DNS 的侦测系统当中,若 DNS上层主机挂掉,那么你就会一直收到错误讯息!)
直接以【数据流重导向】将输出的结果输出到 /dev/null 这个垃圾桶当中就好了。
3.安全的检验
很多时候被植入木马都是以例行命令的方式植入的,所以可以由检查 /var/log/cron 的内容来视察是否有【非自己设定的 cron被执行了】
4.周与日月不可同时并存
另一个需要注意的地方在于:【可以分别以周或者是日月为单位作为循环,但你不可使用【几月几号且为星期几】的模式工作】。

可唤醒停机期间的工作任务

anacron 这个指令主动进行时间到了但却没有执行的排程。

anacron

anacron 并不是用来取代 crontab 的,anacron 存在的目的是在处理非24小时一直启动的 Linux 系统的crontab 的执行以及因为某些原因导致的超过时间而没有被执行的排程工作。
其实 anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的排程任务有没有被执行,如果有超过期限的工作在,就执行该排程任务,执行完毕或无须执行任何排程时,anacron就停止了。
由于 anacron 预设会以一天、七天、一个月为期去侦测系统未进行的 crontab 任务,因此对于某些特殊的使用环境非常有帮助。

anacron 怎么知道我们的系统啥时关机的呢?这就得要使用 anacron 读取的时间记录文件(timestamps)了。anacron 会去分析现在的时间与时间记录文件所记载的上次执行 anacron 的时间,两者比较后若发现有差异,那就是在某些时刻没有进行 crontab,此时 anacron就会开始执行未进行的crontab 任务了!

anacron 与 /etc/anacrontab

anacron 其实是一支程序并非一个服务,这支程序在 CentOS 当中已经进入crontab 的排程。同时anacron 会每个小时被主动执行一次。所以 anacron的配置文件应该放置在/etc/cron.hourly。
在这里插入图片描述

anacron 的语法:

anacron [-sfn] [job]...
anacron -u [job]

在这里插入图片描述在 CentOS 中,anacron 的进行其实是在每个小时都会被抓出来执行一次,但是为了担心 anacron 误判时间参数,因此 /etc/cron.hourly/ 里面的 anacron才会在档名之前加个0(0anacron),让anacron最先进行。就是为了让时间戳先更新,以避免 anacron误判 crontab尚未进行任何工作的意思。

anacron 的配置文件,/etc/anacrontab 的内容:
在这里插入图片描述
在这里插入图片描述
天数:anacron 执行当下与时间戳 (/var/spool/anacron/内的时间纪录文件) 相差的天数,若超过此天数,就准备开始执行,若没有超过此天数,则不予执行后续的指令。
延迟时间:若确定超过天数导致要执行排程工作了,那么请延迟执行的时间,因为担心立即启动会有其他资源冲突的问题。
工作名称定义:这个没啥意义,就只是会在/var/log/cron里头记载该项任务的名称这样!通常与后续的目录资源名称相同即可。
实际要进行的指令串:有没有跟0hourly 很像!没错!相同的作法!透过run-parts来处理的!

anacron 的执行流程(cron.daily为例):
1.由/etc/anacrontab 分析到 cron.daily 这项工作名称的天数为1天;
2.由/var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳;
3.由上个步骤与目前的时间比较,若差异天数为1天以上(含1天),就准备进行指令;
4.若准备进行指令,根据 /etc/anacrontab 的设定,将延迟5分钟+3小时(看 START_HOURS_RANGE 的
设定);
5.延迟时间过后,开始执行后续指令,亦即【run-parts /etc/cron.daily】这串指令;
6.执行完毕后,anacron程序结束。

如此一来,放置在 /etc/cron.daily/ 内的任务就会在一天后一定会被执行的。因为 anacron 是每个小时被执行一次,所以,现在这就是为什么隔了一阵子才将 CentOS 开机,开机过后约1小时左右系统会有一小段时间的忙碌,而且硬盘会跑个不停!那就是因为 anacron正在执行过去 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 里头的未进行的各项工作排程。

总结

crond 与 anacron 的关系:
1.crond 会主动去读取 /etc/crontab, /var/spool/cron/*, /etc/cron.d/*等等配置文件,并依据【分、时、日、月、周】的时间设定去各项工作排程;
2.根据 /etc/cron.d/0hourly 的设定,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的执行文件;
3.因为 /etc/cron.hourly/Oanacron 这个脚本文件的缘故,主动的每小时执行 anacron,并呼叫 /etc/anacrontab的配置文件;
4.根据 /etc/anacrontab 的设定,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/内的执行文件,以进行固定周期需要执行的指令。

也就是说,如果每个周日的需要执行的动作是放置于/etc/crontab 的话,那么该动作只要过期了就过期了,并不会被抓回来重新执行。但如果是放置在 /etc/cron.weeklyl目录下,那么该工作就会定期,几乎一定会在一周内执行一次。如果你关机超过一周,那么一开机后的数个小时内,因为 /etc/anacrontab 的定义该工作就会主动的被执行。

《鸟哥的Linux私房菜-基础篇》学习笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】希尔排序

目录 1. 说明2. 举个例子3. java代码示例4. java示例截图 1. 说明 1.希尔排序是直接插入排序的一种改进&#xff0c;其本质是一种分组插入排序 2.希尔排序采取了分组排序的方式 3.把待排序的数据元素序列按一定间隔进行分组&#xff0c;然后对每个分组进行直接插入排序 4.随着间…

MySQL 8创建数据库、数据表、插入数据并且查询数据

我使用的数据库是MySQL 8。 创建数据库 create database Bookbought; -- 创建数据库Bookbought use Bookbought; -- 使用数据库Bookbought创建数据表 创建用户表bookuser。 create table ## 往allbook里边插入数据(id INT PRIMARY KEY AUTO_INCREMENT, -- id 为 主键userna…

CCKS2023-面向上市公司主营业务的实体链接评测-亚军方案

赛题分析 大赛地址 https://tianchi.aliyun.com/competition/entrance/532097/information 任务描述 本次任务主要针对上市公司的主营业务进行产品实体链接。需要获得主营业务中的产品实体&#xff0c;将该实体链接到产品数据库中的某一个标准产品实体。产品数据库将发布在竞赛…

机器学习决策树ID3算法

1、先去计算总的信息量 2、根据不同指标分别计算对应的信息增益 3、根据算出的信息增益来选择信息增益最大的作为根结点 4、天气中选择一个继续上述过程 5、决策树划分结束

MySQL索引优化实战二

分页查询优化 很多时候我们业务中实现分页功能时可能会用如下SQL来实现&#xff1a; select * from employees LIMIT 10000,10表示从表中中区从10001行开始的10行记录&#xff0c;看似只查了10条记录&#xff0c;但是这条SQL是先读取10010条记录&#xff0c;然后抛弃前10000条…

Spring事务管理介绍

文章目录 Spring事务管理1 Spring事务简介【重点】问题导入1.1 Spring事务作用1.2 需求和分析1.3 代码实现【前置工作】环境准备【第一步】在业务层接口上添加Spring事务管理【第二步】设置事务管理器(将事务管理器添加到IOC容器中)【第三步】开启注解式事务驱动【第四步】运行…

智能优化算法应用:基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.参考…

Nginx配置反向代理与负载均衡

Nginx配置反向代理与负载均衡 一、代理服务1.正向代理2.反向代理 二、实战场景-反向代理1.修改nginx配置 -> nginx.conf文件2.修改前端路径 三、实战场景-负载均衡1.热备2.轮询3.加权轮询4.ip_hash ​ Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器&#xff0c;…

10 分钟解释 StyleGAN

一、说明 G在过去的几年里&#xff0c;生成对抗网络一直是生成内容的首选机器学习技术。看似神奇地将随机输入转换为高度详细的输出&#xff0c;它们已在生成图像、生成音乐甚至生成药物方面找到了应用。 StyleGAN是一种真正推动 GAN 最先进技术向前发展的 GAN 类型。当Karras …

力扣题:字符串的反转-11.23

力扣题-11.23 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;557. 反转字符串中的单词 III 解题思想&#xff1a;先读取单词&#xff0c;然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…

2024年AMC8美国初中数学竞赛最后一个月复习指南(附资料)

还有一个半月的时间&#xff0c;2024年AMC8&#xff08;大家默认都直接叫这个比赛的英文名&#xff0c;而不叫中文名美国数学竞赛或美国初中数学竞赛了&#xff09;就要开始了。 有志于在2024年AMC8的比赛中拿到奖项的孩子已经在“磨拳霍霍”了。那么最后一个半月的时间该如何…

LeetCode刷题---反转链表

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

Linux 进程状态

操作系统学科的进程状态 新建态&#xff1a;刚刚创建的进程&#xff0c; 操作系统还未把它加入可执行进程组&#xff0c; 它通常是进程控制块已经创建但还未加载到内存中的新进程。就绪态&#xff1a;进程做好了准备&#xff0c;只要有机会就开始执行。阻塞态&#xff1a;进程在…

Qt+ROS+ubuntu18.04配置教程(带界面)

1. 安装ROS Qt Creator Plug-in 首先安装ROS Qt Creator Plug-in&#xff0c;这其实是一个带有ROS插件的Qt Creator&#xff1a;去下面的网址https://ros-qtc-plugin.readthedocs.io/en/latest/_source/How-to-Install-Users.html#qt-installer-procedure&#xff0c;根据自己…

Java数据结构 之 包装类简单认识泛类

生命不息&#xff0c;奋斗不止 目录 1. 什么是包装类&#xff1f; 1.1 装箱和拆箱 1.2 自动装箱和自动拆箱 2. 什么是泛型 3. 引出泛型 3.1 语法 4 泛型类的使用 4.1 语法 4.2 示例 4.3 类型推导(Type Inference) 5. 裸类型(Raw Type) &#xff08;了解&#xff09…

IPv6是趋势!如何在Windows上禁用或启用IPv6?有3种简单的方法

IPv6是IPv4的一个更加安全、可扩展和可靠的继任者。然而&#xff0c;这种较新的互联网协议与IPv4不向后兼容&#xff0c;并且大多数VPN服务提供商不支持IPv6协议。 Microsoft不建议用户禁用IPv6或其组件&#xff0c;除非他们需要解决网络问题。但是&#xff0c;如果你计划禁用…

MATLAB实战 | 求水仙花数

循环结构的基本思想是重复&#xff0c;即利用计算机运算速度快以及能进行逻辑控制的特点&#xff0c;重复执行某些语句&#xff0c;以满足大量的计算要求。虽然每次循环执行的语句相同&#xff0c;但语句中一些变量的值是变化的&#xff0c;而且当循环到一定次数或满足条件后能…

阿里云服务器活动:免费试用ECS,轻松搭建WordPress博客平台,送午睡毯及猫超卡

阿里云服务器免费试用3个月 &#xff0c;搭建WordPress博客平台&#xff0c;还送午睡毯及猫超卡。活动时间截止至12月8日 网址&#xff1a; 阿里云服务器薅羊毛 送午睡毯

mac M系列芯片安装chatGLM3-6b模型

1 环境安装 1.1 mac安装conda. 下载miniconda&#xff0c;并安装 curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh sh Miniconda3-latest-MacOSX-arm64.sh1.2 创建虚拟环境并激活 创建名为chatglm3的虚拟环境&#xff0c;python版本为3.10…

Stream API 方法使用总结

文章目录 1.1、Stream介绍1.2、Stream创建对象&#xff08;1&#xff09;empty()方法&#xff08;2&#xff09;of()方法&#xff08;3&#xff09;Arrays.stream()方法&#xff08;4&#xff09;list.stream()方法 1.3、Stream中间方法&#xff08;1&#xff09;filter()方法&…