在CentOS上管理Rust进程,可从系统服务管理和Rust代码层面两方面入手,具体如下:
创建服务文件
在/etc/systemd/system/
下创建.service
文件(如your-rust-app.service
),内容示例:
[Unit]
Description=Your Rust Application
After=network.target
[Service]
User=your-user
Group=your-group
ExecStart=/path/to/your/rust/app/target/release/your-app
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
ExecStart
指定Rust可执行文件路径,需提前通过cargo build --release
构建。Restart
配置进程意外退出时的重启策略。服务操作命令
# 启动服务
sudo systemctl start your-rust-app
# 停止服务
sudo systemctl stop your-rust-app
# 重启服务
sudo systemctl restart your-rust-app
# 查看状态
sudo systemctl status your-rust-app
# 设置开机自启
sudo systemctl enable your-rust-app
日志查看
# 查看服务日志
sudo journalctl -u your-rust-app -f
进程控制
std::process::Command
启动子进程,支持参数传递、环境变量设置等,例如:use std::process::Command;
let output = Command::new("ls")
.arg("-l")
.output()
.expect("执行失败");
println!("{}", String::from_utf8_lossy(&output.stdout));
守护进程实现
fork
或daemonize
库实现守护进程,例如daemonize
库的使用:use daemonize::Daemonize;
let daemonize = Daemonize::new()
.pid_file("/tmp/your-app.pid")
.working_directory("/path/to/working/dir")
.stdout("/tmp/your-app.log")
.stderr("/tmp/your-app.err");
daemonize.start().expect("守护进程启动失败");
异步进程管理
tokio
或async-std
库实现异步任务调度,例如:use tokio::process::Command;
#[tokio::main]
async fn main() {
let output = Command::new("sleep")
.arg("10")
.output()
.await
.expect("异步执行失败");
println!("执行结果: {:?}", output);
}
查看进程状态
# 查看所有进程
ps aux | grep your-rust-app
# 实时监控资源使用
top -p $(pgrep your-rust-app)
权限与安全
setcap
为Rust程序赋予特定权限(如网络访问),避免使用root
运行:sudo setcap 'cap_net_bind_service=+ep' /path/to/your/app