server: write main daemon PID to run directory
so that we can easily get the main PID of the last recently launched daemon. Will be used to get the control socket of that one for access lgo rotate in a future patch Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
b469011fd1
commit
04b053d87e
@ -9,6 +9,7 @@ After=proxmox-backup.service
|
||||
Type=notify
|
||||
ExecStart=%LIBEXECDIR%/proxmox-backup/proxmox-backup-proxy
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
PIDFile=/run/proxmox-backup/proxy.pid
|
||||
Restart=on-failure
|
||||
User=%PROXY_USER%
|
||||
Group=%PROXY_USER%
|
||||
|
@ -7,6 +7,7 @@ After=network.target
|
||||
Type=notify
|
||||
ExecStart=%LIBEXECDIR%/proxmox-backup/proxmox-backup-api
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
PIDFile=/run/proxmox-backup/api.pid
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
|
@ -78,6 +78,7 @@ async fn run() -> Result<(), Error> {
|
||||
},
|
||||
);
|
||||
|
||||
server::write_pid(buildcfg::PROXMOX_BACKUP_API_PID_FN)?;
|
||||
daemon::systemd_notify(daemon::SystemdNotify::Ready)?;
|
||||
|
||||
let init_result: Result<(), Error> = try_block!({
|
||||
|
@ -145,6 +145,7 @@ async fn run() -> Result<(), Error> {
|
||||
},
|
||||
);
|
||||
|
||||
server::write_pid(buildcfg::PROXMOX_BACKUP_PROXY_PID_FN)?;
|
||||
daemon::systemd_notify(daemon::SystemdNotify::Ready)?;
|
||||
|
||||
let init_result: Result<(), Error> = try_block!({
|
||||
|
@ -12,12 +12,19 @@ macro_rules! PROXMOX_BACKUP_LOG_DIR_M { () => ("/var/log/proxmox-backup") }
|
||||
|
||||
/// namespaced directory for in-memory (tmpfs) run state
|
||||
pub const PROXMOX_BACKUP_RUN_DIR: &str = PROXMOX_BACKUP_RUN_DIR_M!();
|
||||
|
||||
/// namespaced directory for persistent logging
|
||||
pub const PROXMOX_BACKUP_LOG_DIR: &str = PROXMOX_BACKUP_LOG_DIR_M!();
|
||||
|
||||
/// logfile for all API reuests handled by the proxy and privileged API daemons
|
||||
pub const API_ACCESS_LOG_FN: &str = concat!(PROXMOX_BACKUP_LOG_DIR_M!(), "/api/access.log");
|
||||
|
||||
/// the PID filename for the unprivileged proxy daemon
|
||||
pub const PROXMOX_BACKUP_PROXY_PID_FN: &str = concat!(PROXMOX_BACKUP_RUN_DIR_M!(), "/proxy.pid");
|
||||
|
||||
/// the PID filename for the privileged api daemon
|
||||
pub const PROXMOX_BACKUP_API_PID_FN: &str = concat!(PROXMOX_BACKUP_RUN_DIR_M!(), "/api.pid");
|
||||
|
||||
/// Prepend configuration directory to a file name
|
||||
///
|
||||
/// This is a simply way to get the full path for configuration files.
|
||||
|
@ -4,6 +4,7 @@
|
||||
//! services. We want async IO, so this is built on top of
|
||||
//! tokio/hyper.
|
||||
|
||||
use anyhow::{format_err, Error};
|
||||
use lazy_static::lazy_static;
|
||||
use nix::unistd::Pid;
|
||||
|
||||
@ -24,6 +25,18 @@ pub fn pstart() -> u64 {
|
||||
*PSTART
|
||||
}
|
||||
|
||||
pub fn write_pid(pid_fn: &str) -> Result<(), Error> {
|
||||
let pid_str = format!("{}\n", *PID);
|
||||
let opts = proxmox::tools::fs::CreateOptions::new();
|
||||
proxmox::tools::fs::replace_file(pid_fn, pid_str.as_bytes(), opts)
|
||||
}
|
||||
|
||||
pub fn read_pid(pid_fn: &str) -> Result<i32, Error> {
|
||||
let pid = proxmox::tools::fs::file_get_contents(pid_fn)?;
|
||||
let pid = std::str::from_utf8(&pid)?.trim();
|
||||
pid.parse().map_err(|err| format_err!("could not parse pid - {}", err))
|
||||
}
|
||||
|
||||
pub fn ctrl_sock_from_pid(pid: i32) -> String {
|
||||
format!("\0{}/control-{}.sock", buildcfg::PROXMOX_BACKUP_RUN_DIR, pid)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user