---
url: /getting-started/run.md
description: 查找配置、设置数据目录、运行、重载和停止 mayami
---

# 运行

## 配置查找顺序

没有 `-c` 时，mayami 按以下顺序寻找第一份存在的配置：

1. `./config.yaml`
2. `./mayami.yaml`
3. `$XDG_CONFIG_HOME/mayami/config.yaml`
4. `$XDG_CONFIG_HOME/mayami/mayami.yaml`
5. `~/.config/mayami/config.yaml`
6. `~/.config/mayami/mayami.yaml`
7. `/etc/mayami/config.yaml`
8. `/etc/mayami/mayami.yaml`

也可以用环境变量 `MAYAMI_CONFIG` 指定文件。`mayami init` 默认写 `./mayami.yaml`，不是 `./config.yaml`。

## 全局参数

| 参数 | 环境变量 | 含义 |
|---|---|---|
| `-c, --config FILE` | `MAYAMI_CONFIG` | 配置文件 |
| `-D, --data DIR` | `MAYAMI_DATA` | 相对路径的基准，也是 mayami 自己保存规则集、provider、cache 和面板的位置；不写时用配置文件所在目录 |
| `--color auto\|always\|never` | | 输出是否使用颜色，默认 `auto` |

## 启动

```sh
mayami run -c /etc/mayami/mayami.yaml -D /var/lib/mayami
```

没有子命令等同于 `run`：

```sh
mayami -c /etc/mayami/mayami.yaml -D /var/lib/mayami
```

`run --log LEVEL` 临时覆盖配置里的日志级别：

```sh
mayami run --log debug
```

级别是 `error`、`warn`、`info`、`debug` 或 `trace`。

## 日志

`log` 可以直接写级别，也可以写成映射：

```yaml
log:
  level: info
  timestamp: true
  output: mayami.log
```

`output` 省略时写标准输出；写文件时以 0640 创建，并在 `SIGHUP` 时重新打开。

## 信号

| 信号 | 行为 |
|---|---|
| `SIGHUP` | 重新打开日志并读配置；成功时切换快照，失败时保留正在运行的状态 |
| `SIGUSR1` | 立即重新抓取所有带 URL 的规则集和 provider |
| `SIGINT`、`SIGTERM` | 正常停下，清理自己的内核和网络状态后退出 |

`mayami api reload` 通过控制 API 触发与 `SIGHUP` 相同的配置重读。

## systemd

Debian 包使用持续运行的单元；`-D` 放在数据目录：

```ini
[Service]
User=mayami
StateDirectory=mayami
StateDirectoryMode=0700
UMask=0077
ExecStart=/usr/bin/mayami -c /etc/mayami/mayami.yaml -D /var/lib/mayami run
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=10s
```

使用 `capture` 时需要额外能力和 root，Debian 包通过 drop-in 提供。完整安装与启动边界见 [安装](/getting-started/install#debian)。

## 数据与缓存

`-D` 影响配置中的相对路径以及以下内容的位置：

* 下载的规则集和 provider；
* `cache_file` 的默认 `cache.db`；
* 下载的面板；
* 其他运行时持久状态。

不写 `-D` 时这些内容都相对于配置文件目录。多个实例共享存储时，先用各配置的 `cache_file.cache_id` 区分。

## 检查而不启动

```sh
mayami check -c /etc/mayami/mayami.yaml -D /var/lib/mayami
```

`check` 读取配置、规则集和其余可以离线构建的对象，不监听端口，也不启动 capture。第一次运行前先执行它。
