说明
启动顺序
1 | # 自己的启动脚本,需要 chmod a+x |
分类
rc 格式
需要符合 rc 格式
1 | chmod a+x /usr/local/etc/rc.d/* |
格式如下
1 |
|
自定义脚本
1 | chmod a+x /etc/rc.local |
标准 shell 格式
1 |
|
启动顺序
1 | # 自己的启动脚本,需要 chmod a+x |
需要符合 rc 格式
1 | chmod a+x /usr/local/etc/rc.d/* |
格式如下
1 |
|
1 | chmod a+x /etc/rc.local |
标准 shell 格式
1 |
|
1 | https://buildroot.org/downloads/buildroot-2025.02.3.tar.gz |
1 | make O=output qemu_arm_vexpress_defconfig |
1 | make O=output menuconfig |
1 | Bootloaders ---> |
1 | make O=output -j$(nproc) |
编译结果在 output/images 下
beam 被杀死以后,会重新启动,用于对于稳定性要求很高的场合。
或者先 kill 掉 heart 进程,在 kill 掉 beam 进程
vm.args
1 | # 这个必须设置 |
或者设置环境变量
1 | export HEART_COMMAND="/xxx/rel/demo_release/bin/demo_release daemon" |
节点 1
1 | erl -heart -sname aaa@manjaro -setcookie 123456 \ |
节点 2
1 | erl -sname bbb@manjaro -setcookie 123456 |
节点 1
1 | export HEART_COMMAND="erl -heart -sname aaa@manjaro -setcookie 123456" |
节点 2
1 | erl -sname bbb@manjaro -setcookie 123456 |
切换到远程节点
1 | Ctrl + G |
1 | os:getenv("HEART_COMMAND"). |
如果要关闭,则 remsh 到目标节点,执行
1 | :init.stop() |
不可以用 pkill, 因为 heart 也是 erl 体系内的
1 | ps aux | grep erl |
1 | computed() 的值随 signal 变化自动保持最新 |
1 | <div> |
1 | export class Demo1 { |
demo-service.ts
1 | import { computed, effect, Injectable, signal } from "@angular/core"; |
demo2.ts
1 | import { Component, OnInit, Signal, WritableSignal } from "@angular/core"; |
demo2.html
1 | <div> |
依赖于 rebar3 的 appup 插件
创建项目
1 | rebar3 new release demo |
rebar.config
1 | % 编译时配置 |
初始版本
1 | rebar3 as prod release |
修改版本号
1 | rebar.config 里面的 release 版本号 |
构建新版本
原来 build 过的老的 release 不能删除,这个升级插件至少需要两个版本的 release
1 | rebar3 as prod release |
1.0.0 的压缩包先解压,然后运行
1 | bin/demo console |
一定要注意,新版本的存放目录
1 | cp ../demo-2.0.0.tar.gz ./releases/ |
降级
1 | bin/demo downgrade 1.0.0 |
1 | rebar3 new release demo |
demo1, demo2 等为自动启动的 application
1 | % 编译时配置 |
生成 release 目录
1 | REBAR_PROFILE=prod rebar3 release -o ~/downloads |
1 | REBAR_PROFILE=prod rebar3 tar -o ~/downloads |
根据路由修改 title, description
用于 seo
1 | ng new demo |
app.routes.ts
1 | import { Routes } from "@angular/router"; |
app.html
1 | <div> |
app.ts
1 | import { Component } from "@angular/core"; |
aaa.ts
1 | export class Aaa implements OnInit { |
bbb.ts
1 | export class Bbb implements OnInit { |
直接贴代码
1 | import os |
1 | docker run -it xxx /bin/bash |
自动重启
1 | docker run --restart=always xxxx |
环境变量
1 | docker run xxxx -e TZ=Asia/Shanghai |
以某个用户名启动
1 | docker run -u root |
指定用户进入 shell
1 | docker exec -it -u root xxx bash |
默认是 root, 有时候希望不是
1 | docker run -it --user $(id -u ${USER}):$(id -g ${USER}) xxx |
默认 root 有些权限用不了
1 | docker run -it --privileged xxx |
清理
1 | truncate -s 0 /var/lib/docker/containers/*/*.log |
查看资源
查看 cpu,内存等等
1 | docker stats |
1 | docker build -t xxx ./ --no-cache |
构建时使用变量
多阶段构建,需要在每个阶段都写一遍
1 | ARG MIX_ENV |
例子
Dockerfile
1 | # 构建阶段 |
构建
1 | docker build --build-arg MIX_ENV=test -t demo ../ --no-cache |
构建时
DockerFile
1 | RUN rm -f /etc/localtime \ |
运行时
1 | docker run xxx -v /etc/localtime:/etc/localtime -e TZ=Asia/Shanghai |
或者
1 | docker run xxx -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -e TZ=Asia/Shanghai |
ntfs 分区不支持
1 | /etc/docker/daemon.json |
1 | { |
容器保存为 tar,比 save 保存的文件小很多
1 | docker export ${CONTAINER_ID} > xxx.tar |
从容器 tar 还原为 image
1 | docker import xxx.tar image_name:tag |
当前容器直接保存为 image
1 | docker commit ${CONTAINER_ID} image_name:tag |
保存 image 为 tar 包,使用 tag 保存,不然 load 的时候,会显示 <none>
1 | docker save -o xxx.tar redis:5.0.0 |
tar 包还原为 image,不可以重命名,这里的 tar 是指docker images保存出的 tar
1 | docker load -i xxx.tar |
1 | getent passwd postgres |
查看
1 | cat /etc/group |
添加组
1 | groupadd $GROUP |
删除组
1 | groupdel $GROUP |
添加用户到用户组
1 | gpasswd -a $USER $GROUP |
用户组里面删除用户
1 | gpasswd -d $USER $GROUP |
目录权限
1 | chown -R $USER $DIR |
用户组赋予读写执行权限
1 | chmod -R ug+w $DIR |
修改 id
1 | usermod -u $UID $USER |
修改完以后, 尤其是改完 uid
一定要 修改 被修改 id 的用户 目录下的文件权限,否则无法登录