Write the Code. Change the World.

分类目录
4月 05

编译安装 gcc gcc-c++

官网: https://gcc.gnu.org/

安装文档:
https://gcc.gnu.org/install/

安装包镜像:
https://gcc.gnu.org/mirrors.html

https://bigsearcher.com/mirrors/gcc/releases/

发现 yum 源上的是 8.3版本,而 9.3版本已经在2020年3月12日发布了。

cd /usr/local/src/

mkdir gcc

cd gcc

wget https://bigsearcher.com/mirrors/gcc/releases/gcc-9.3.0/gcc-9.3.0.tar.gz

tar -xzvf gcc-9.3.0.tar.gz

# 哎呀 ,不熟悉。还是 yum 安装吧。强迫症郁闷。
4月 05

先更新yum并安装依赖

尽可能的安装最新版本。如果 yum 安装的不是最新版本,可以先卸载掉,再下载源码编译安装。yum 安装新包之前,可以先查看下该包是否是最新版本。编译安装后,可以 ls -l 建立软链接,下次有新包,可以再覆盖安装。

# 更新 yum 包
yum update

# 查看某个安装,比如 gcc。 它会显示是否存在该安装,该安装的版本,是否已经安装等信息。

yum list gcc

需要安装:

  1. gcc gcc-c++。它可以编译 C,C++,Ada,Object C和Java等语言。

  2. pcre pcre-devel。PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。

  3. nginx 使用 zlib 对 http 包的内容进行 gzip。可是,不是用 Brotli 么。两个都装,装了也没事。gzip 编译安装来个。如果不编译,使用 yum 安装,版本达不到要求。

  4. bzip2 是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。

开始安装

yum install gcc gcc-c++

yum install pcre pcre-devel

yum install zlib zlib-devel

yum install bzip2

安装 openssl

https://blog.vini123.com/301

安装 cmake

https://blog.vini123.com/289

已经安装到了 usr/local/bin 下了,不需要软链了

安装 ngx_brotli

参考从前:https://blog.vini123.com/298

12月 03

校准时间

有些时候,特别是虚拟机,跑着跑着,可能就不准了。校准时间就有必要了。

使用 ntpdate

这里使用 ntpdate 来纠正数据

# centos
yum install ntpdate

# ubuntu
apt-get install ntpdate

# 开始纠正
ntpdate -u ntp.api.bz

如果发现时间和上海时间相差 8 个小时,时区问题请解决,再执行上边的命令。

vim /etc/profile

G

# 调到末尾,加入下边的命令
export TZ='CST-8'

# 使得环境变量生效,再执行上边的命令纠正时区
source /etc/profile

如果经常纠正可以加入定时任务

参考

https://time.is/

https://www.cnblogs.com/luchuangao/p/7795293.html

https://blog.csdn.net/wblinux/article/details/81981328

https://blog.csdn.net/qq_27664167/article/details/80921327

https://www.cnblogs.com/st-jun/p/7737188.html

9月 12

这里的关键点:
1. redis 异步队列。
2. 多项目。

面对上边这种情况,怎么处理呢。如果不处理又会出现什么现象呢。

因为我们使用 supervisord 进行常驻队列侦听。如果不指定对应的 queue,多项目就会出现串的情况。这个是就可以用 queue 来处理该问题了。

处理

  1. 修改 supervisord 的配置文件。在 command 中指定一个 queue 。如
command=/alidata/service/php/bin/php /alidata/www/www.mlxiu.com/artisan queue:work redis --queue=test --sleep=3 --tries=3
  1. 在项目中,指定 queue。因为使用的是 laravel 框架。 队列继承 ShouldQueue。 可以在构造函数中指定 queue 即可。
public function __construct($id)
{
     $queueName = config('queue.name');
     if ($queueName) {
         $this->onQueue($queueName);
     }
}

queue.name 是自己额外在 queue.config 中添加的变量。

参考

https://www.cnblogs.com/zgxblog/p/10996112.html

8月 05

有时候,会去查看系统的磁盘空间。这个时候,一些命令就用的着了。

查看磁盘空间

# df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
# `-h` 选项为根据大小适当显示
df -h

显示内容参数说明:

  • Filesystem:文件系统
  • Size: 分区大小
  • Used: 已使用容量
  • Avail: 还可以使用的容量
  • Use%: 已用百分比
  • Mounted on: 挂载点 

查看某个文件夹或文件的大小

# 查看当前文件夹的总大小 `h` 以适当大小显示(比如 M,G 单位)
du -sh

# 查看对应深度的文件大小
du -h --max-depth=1

# 查看某个文件大小
du -h xxx.txt

排序功能就不说了,太多记不住。实用即可。

7月 20

既然是再来一次定时任务,那我们就要有明确的目标以及观察点。来列列。

列列观察点

  1. 如何开启定时任务,开启多大频率或定时的任务,几种方式开启。

  2. 定时任务日志功能。(这样才能更好的找到问题的所在)

  3. 定时任务的执行用户。比如 root 用户,非 root 用户。这之间有什么影响和不一样。

  4. 额外, no login 用户的 shell 执行。

开启定时任务

方法 1:

# 编辑,并添加定时任务
vim /etc/crontab 

方法 2:

# 给当前用户添加定时任务。如果是 root 用户登录的,就是给 root 用户添加定时任务(就是执行用户是 root)
crontab -e 

# 给 nginx 用户添加定时任务(编写命令即可)
crontab -e -u nginx

给 root 用户添加定时任务的缺点是 root 用户产生的文件,其他用户默认是没权限去操作的。比如写了日志,其他用户想继续打开该日志来编写,是没办法操作的。除非改权限设置等操作。

方法 3:

vim cron.txt

# 将定时任务命令写在 cron.txt 里边,然后再执行
crontab cron.txt -u nginx

方法 4:

以上的方法,只是命令在其他 sh 文件里。

查看,重启,关闭

查看关闭:

# 查看当前用户执行的定时任务
crontab -l

# 查看 nginx 用户执行的定时任务
crontab -l -u nginx

# 删除当前用户执行的定时任务
crontab -r 

# 删除 nginx 用户执行的定时任务

crontab -r -u nginx

重启:

//启动服务 
service crond start 

//关闭服务 
service crond stop 

//重启服务 
service crond restart 

日志

# 这里可以看到日志的
tail -f /var/log/cron

如果日志文件不存在(被删除了或啥的,请使用下面命令从新生起)

# 重启rsyslog服务:
service rsyslog restart 

# 重启 cron
service cron restart

报错

如果使用 nginx 这种 nologin 用户执行定时任务会报错的。如下:

(CRON) ERROR chdir failed (/home/nginx): No such file or directory

这个时候,只需要在 home 目录下,创建个 nginx 文件夹就 ok 了。

参考

https://www.jianshu.com/p/5d6a0d729ef7

7月 06

git 存在这样一个场景。曾经的代码用的 https 协议进行上传下载。这个时候,总是要输入用户名和密码。这样好烦好烦的。突然有一天,你想用 ssh 协议了(不用再输密码),这个时候就要切换协议了。下边就说说怎么操作。

没有公私秘钥,要生

# 生,一路回车就好
ssh-keygen -t rsa -C "abcd@mlxiu.com"

cat ~/.ssh/id_rsa.pub

生了后,先要将公钥内容复制出来,设置到你所托管的 ssh 设置相应的地方。比如托管的 gitlab 或 github,都有对应的地方设置。设置好了后,就可以切协议了。

查看切换协议

# 查看
git remote -v

# 切换
git remote set-url origin git@gitlab.xxxxxxx

然后你


git pull origin master git push origin master

就不用再输入账号密码了。

7月 02

linux 下 tree 很好用的。方便查看文件夹以及子文件夹N个子子文件夹里的文件,并很好的展示出来。如下图:

下边来说说怎么使用和操作。

先安装

## centos 
yum install tree

## ubuntu
apt-get install tree

没权限,请加 sudo

再使用

## 帮助
tree --help

## 显示某个文件夹下的(默认当前文件夹)
tree /usr/local 
tree app

## -d 参数,只显示文件夹,不显示文件夹里的内容。如上图

tree -d

## -L n (n表示级数,是 int 类型,且必须)
tree -L 2 # 显示当前目录以及目录下的文件

不仅能展示,还能将展示的结构写到文本里,如:

sudo tree app -d -L 3 > /usr/local/src/tree.txt

# 查看保存的结果
cat /usr/local/src/tree.txt

就这样了。用到这几个就可以了。更多的功能待去揣摩。