Linux 系统下如何将前台应用作为后台进程运行:nohup 与 & 命令的使用

2022-04-26
阅读 1 分钟
1.7k
COMMAND & 形式前台进程变为后台进程。如果不指定输出重定向(例如:COMMAND >out.log 2>&1 &),输出仍然打印到前台。退出 shell 会话(其父进程),进程会收到 HUP 信号,从而退出。在另一个 shell 会话向进程发送 INT 信号,进程会退出。总结:COMMAND & 形式仅仅将前台进程放在后台运行,但进...

docker:latest 和 docker:dind 镜像区别

2020-09-26
阅读 2 分钟
12.2k
我们在编写 CI 时通过声明镜像作为 job 的执行环境,每个 job 都在一个纯净的容器中执行。有时,我们需要一个 docker 容器环境来执行 docker build、docker push 等操作。查看官方的 docker 镜像,我们发现存在两个主要的版本:docker:latest、docker:dind 和 docker:git。

Prometheus 监控系统的学习总结

2020-09-14
阅读 6 分钟
8.7k
APM ( Application Performance Management ) 是应用性能管理的缩写,代表了服务的行为、可靠性、性能等的监控和管理。当应用发生故障,利用 APM 设施可以迅速检测并定位到产生故障的原因。

通过 GitLab Runner 实现 CI/CD 工作流(下)

2020-05-08
阅读 4 分钟
6.4k
上篇文章《通过 GitLab Runner 实现 CI/CD 工作流(上)》我们讲解了 GitLab Runner 的部署和配置优化,这次我们来进行一次实战演练,对一个完整的前后端分离的项目进行讲解。这个项目分为前端和后端两个项目,他们有独自的代码仓库,对于不同仓库的代码提交,会触发对应的项目的代码编译、镜像构建、镜像发布与项目部署。

Go 1.14 新特性之 Goroutine 抢占式调度

2020-04-29
阅读 2 分钟
8.9k
我们分析一下程序执行过程,设置 P 数量以后,执行打印 The program starts ...,之后将匿名 goroutine 加入调度队列,执行 Sleep 操作,在 sleep 过程中调度器会将 main goroutine 从唯一 P 中让出,执行匿名 goroutine,而这个 goroutine 是无限循环,并且中间没有函数调用,导致调度器无法插手把它让出继续执行 main...

通过 GitLab Runner 实现 CI/CD 工作流(上)

2020-04-26
阅读 7 分钟
9.7k
CI/CD 是持续集成、持续部署的意思,研发团队的开发流程以代码版本仓库(VCS)为中心,以不同的 branch 或 tag 进行代码提交,之后 VCS 会触发一系列的流水线作业,包括代码检查、单元测试、编译、打包镜像、发布镜像、触发测试环境或生产环境的部署等,这一切都是自动的。研发成员只需要提交代码到 VCS 就可以了,免去...

笔记本最小化安装 CentOS 启动之后无法启动无线网卡的解决方法

2020-01-27
阅读 3 分钟
5k
春节假期在家闲来无事,把大学期间使用的华硕笔记本改造成一台家庭服务器。最小化安装 CentOS 7.7 之后出现了无法启动无线网卡的情况,并且奇怪的是在经过一次休眠之后,无线网卡就会恢复启动。

Linux 用户、用户组和权限

2020-01-19
阅读 4 分钟
6.8k
系统账号主要用于运行特定的 daemon 程序,比如我们添加专门的 Linux 用户 www 和 mysql 来运行 Nginx 和 MySQL,这是为了便于控制程序的权限(即运行此程序的账号的权限),若程序被侵入,防止攻击者可以任意执行系统中的其他行为。系统账号一般会将其登录 shell 设为 /sbin/nologin,即不可通过 shell 登录,一般的使...

Protobuf 的 import 功能在 Go 项目中的实践

2019-12-31
阅读 4 分钟
28.8k
我们会有这样的需求:在不同的文件夹中定义了不同的 proto 文件,这些不同的文件夹可能是一些不同的 gRPC 服务。因为不想重复定义某一个 message,所以其中一个服务可能会用到其他服务中定义的 message,那么这个时候就需要使用到 proto 文件的 import 功能。

理解服务端对 TCP 握手的处理,以及什么是 backlog

2019-12-24
阅读 4 分钟
5.1k
理论 握手过程 我们知道,客户端与服务端之间建立 TCP 连接需要经过三次握手的过程: 客户端向服务端发送 SYN 服务端返回 SYN + ACK 客户端发送 ACK 至于 TCP 连接为什么需要三次握手,这三次握手是怎样确保传输的可靠性的? 这个问题,请阅读这篇文章。 而这篇文章的重点是,在这三次握手的过程中,服务端是怎样维护一...

必须掌握的 Linux 命令清单

2019-12-23
阅读 1 分钟
1.8k
本文目的在于列举出可以提高生产力/提高分析问题效率的 Linux 命令,整理出一份清单,以备日后着重记忆与掌握。本文的目的并不在于详解每个命令的具体使用方法。该清单会保持持续更新。

通过 Docker 快速部署公司内部 GitLab

2019-12-08
阅读 3 分钟
10k
假设公司有一个内网环境(云上或者本地),CIDR 为 192.168.31.0/24,该网段内有一台静态 IP 的服务器 192.168.31.43,用于部署 GitLab,所有开发同学从这台服务器克隆项目,并往这台服务器 push 代码。

NGINX 知识总结

2019-11-01
阅读 1 分钟
4.4k
location = expression {}   精准匹配,只有 URI 和 expression 完全相同,才算匹配成功;

PHP 后期静态绑定 ( Late Static Bindings ) 的使用

2019-10-27
阅读 3 分钟
1.7k
后期静态绑定也就是 static:: 在类中的用法,首先需要明确一点,static:: 后可跟 类常量 、静态属性(类变量)、静态方法 和 普通方法(跟 类常量/静态属性/静态方法 时 static 代表一个类,跟 普通方法时 static 代表一个对象),不可以跟普通属性(对象的成员变量),因为语义上无法辨别是普通属性还是静态属性(语法...

Docker Network 容器间的通信

2019-09-03
阅读 2 分钟
13.6k
容器间的通信方式 一个分布式应用,多个容器之间往往需要通信,比如 HTTP 服务容器往往需要与数据库容器进行通信。容器的通信方式有以下几种: 通过 docker run 起一个容器时带上 --link 参数指定该容器与其他容器进行相关联 (即将废弃,原理就不描述了) 通过 Docker Network 系统来建立通信 通过 docker-compose 容器...

MySQL 进行 Docker 容器化之体验

2019-09-01
阅读 2 分钟
3.7k
Docker 的使用原则是所有容器化的应用程序都应该是无状态的,即容器内部只跑业务逻辑,容器应用的所有配置文件、日志文件和持久化数据都应该挂载到宿主机文件系统,不应该存储在容器内部,以免容器被误删或自身出现问题导致数据丢失。

Go 切片的 append 操作总结

2019-08-23
阅读 2 分钟
5k
切片有 len 和 cap 两个属性,代表切片的引用长度和切片的容量(从切片的引用起点位置到其底层数组最末端的长度。因为其底层数组的长度是固定的,这也就是意味着容量是指切片可引用的最大宽度)。

Go 的包与编译时的依赖包查找机制

2019-08-15
阅读 1 分钟
4.9k
目录和目录下源文件的包命名可以不同,目录被导入时只是提供包的路径而已;若目录名称和目录下包名称不同,当目录被导入时不必为包起别名即可在下文中使用包,当然,使用方式不是以目录名为前缀,而是以目录下的包名为前缀,不过这会导致读代码时不知道该包是来自哪个路径。所以一般规范的写法是保持目录和目录下的包名...

MySQL 中常用的字段类型总结

2019-06-11
阅读 2 分钟
3.5k
MySQL 可以为整数类型指定宽度,例如 INT(11),对大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了 MySQL 的一些交互工具(例如 MySQL 命令行客户端)用来显示字符的个数。对于存储和计算来说,INT(1) 和 INT(20) 是相同的。只有使用 ZEROFILL 属性时,指定长度才有意义(按照指定长度进行零的填充)。

ES5 / ES6 自定义错误类型比较

2018-08-05
阅读 3 分钟
8.2k
JavaScript 原生提供了7种错误类型,分别是 Error, EvalError, SyntaxError, RangeError, ReferenceError, TypeError, 和 URIError。当我们在编写提供给其他开发者使用的库(包)时,为了在必要的时候给予开发者错误信息反馈(例如,开发者所传参数类型不正确),我们通常会抛出错误,但是原生提供的这些错误类型不够有...

PHP变量 之 对象类型变量

2018-04-22
阅读 2 分钟
4.6k
若一个变量是一个对象,那么该变量保存的就是一个引用类型的值,即变量中实际保存的是堆内存中对象的地址,而不是对象的实体;若变量为其他类型,则保存的是基本类型值,而不是引用地址。这一点需要特别注意,因为我们可能会遇到如下几种情况,不清楚原理可能导致出错。

开发模式与产品模式下的PHP报错处理

2018-04-19
阅读 2 分钟
2.5k
在开发php程序时,我们希望遇到php报错,可以第一时间展示给我们,以便于调试。当程序开发完成,成为正式产品时,我们希望将没有预测到的报错信息记录到错误日志中,而不是将这些报错信息展示给用户,因为用户极有可能利用这些暴露出脚本路径、数据库信息或其他的报错信息进行一些破坏性的黑客行动。

PHP之引用计数内存管理机制和垃圾回收机制

2018-03-29
阅读 3 分钟
4.5k
a和b指向了同一块内存区域(变量容器 zval ),我们通过 var_dump($a, $b) 得到 string(5) "apple" string(5) "apple" ,这是我们预期的结果。

一次php脚本执行过程中多次实例化PDO的情景分析

2018-03-14
阅读 2 分钟
3.3k
可以看到一个脚本的执行产生了三个数据库连接,但是如果将后面的实例化的pdo实例赋值给之前实例化的pdo实例,则新的连接会替换掉前一个连接,而不会产生新的连接。所以我们在编程过程中,应该避免多次实例化pdo,而产生不必要的数据库性能消耗。

对 PHP-FPM 和 CGI,还有并发响应的理解

2017-11-18
阅读 2 分钟
7.2k
关于本篇文章的部分纠正,请参考这篇文章:[链接] 首先搞清楚php-fpm与cgi的关系 CGI CGI是一个web server与cgi程序(这里可以理解为是php解释器)之间进行数据传输的协议,保证了传递的是标准数据。 PHP-CGI php-cgi是php解释器,就是上文提到的cgi程序。 Fastcgi Fastcgi是用来提高cgi程序(php-cgi)性能的方案/协议...

不借助 vue-cli,自行构建一个 vue 项目

2017-11-01
阅读 3 分钟
6.7k
对于刚刚接触vue的同学来说,直接用官方的构建工具vue-cli来生成一个项目结构会存在一些疑惑,比如: .vue组件 为什么可以写成三段式(tempalte、script、style)? 整个项目是怎样组织运行起来的,main.js - App.vue - 各个组件 之间是怎么相互引用的?