Apply daemonize for unix

This commit is contained in:
ssrlive 2024-09-14 22:02:05 +08:00
parent e817257866
commit 607d709c03
3 changed files with 17 additions and 3 deletions

View file

@ -52,6 +52,9 @@ nix = { version = "0.29", default-features = false, features = [
android_logger = "0.14"
jni = { version = "0.21", default-features = false }
[target.'cfg(unix)'.dependencies]
daemonize = "0.5"
[target.'cfg(target_os = "windows")'.dependencies]
windows-service = "0.7"

View file

@ -100,8 +100,7 @@ pub struct Args {
#[arg(short, long, value_name = "level", value_enum, default_value = "info")]
pub verbosity: ArgVerbosity,
/// Daemonize the process as Windows service
#[cfg(target_os = "windows")]
/// Daemonize for unix family or run as Windows service
#[arg(long)]
pub daemonize: bool,
}
@ -144,7 +143,6 @@ impl Default for Args {
udp_timeout: 10,
verbosity: ArgVerbosity::Info,
virtual_dns_pool: IpCidr::from_str("198.18.0.0/15").unwrap(),
#[cfg(target_os = "windows")]
daemonize: false,
}
}

View file

@ -5,6 +5,19 @@ async fn main() -> Result<(), BoxError> {
dotenvy::dotenv().ok();
let args = Args::parse_args();
#[cfg(unix)]
if args.daemonize {
let stdout = std::fs::File::create("/tmp/tun2proxy.out")?;
let stderr = std::fs::File::create("/tmp/tun2proxy.err")?;
let daemonize = daemonize::Daemonize::new()
.working_directory("/tmp")
.umask(0o777)
.stdout(stdout)
.stderr(stderr)
.privileged_action(|| "Executed before drop privileges");
let _ = daemonize.start()?;
}
#[cfg(target_os = "windows")]
if args.daemonize {
tun2proxy::win_svc::start_service()?;