summaryrefslogtreecommitdiffhomepage
path: root/src/platform/linux.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/linux.rs')
-rw-r--r--src/platform/linux.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/platform/linux.rs b/src/platform/linux.rs
index 32fd819..e6cf577 100644
--- a/src/platform/linux.rs
+++ b/src/platform/linux.rs
@@ -220,3 +220,39 @@ pub fn run() -> Result<()> {
Ok(())
}
+
+const PKG_NAME: &str = env!("CARGO_PKG_NAME");
+const DAEMON_PREFIX: &str = "/tmp";
+
+fn daemonize() -> Result<()> {
+ use std::fs;
+ use daemonize::Daemonize;
+
+ let log_file = fs::File::create(format!("{DAEMON_PREFIX}/{PKG_NAME}.log"))?;
+ let pid_file = format!("{DAEMON_PREFIX}/{PKG_NAME}.pid");
+
+ let daemonize = Daemonize::new()
+ .pid_file(&pid_file)
+ .chown_pid_file(true)
+ .working_directory(DAEMON_PREFIX)
+ .stdout(log_file);
+
+ daemonize.start()?;
+
+ // TODO: detach damonize and opt.rs and use log_println here
+ println!("start as daemon: pid {}", std::process::id());
+
+ Ok(())
+}
+
+pub fn daemonize_1() {
+ const EXIT_DAEMON_FAIL: i32 = 2;
+
+ match daemonize() {
+ Ok(_) => {},
+ Err(e) => {
+ println!("{PKG_NAME}: fail to start as daemon: {e}");
+ std::process::exit(EXIT_DAEMON_FAIL);
+ }
+ }
+}