diff --git a/.gitignore b/.gitignore index feab649..0bb663d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ dbus-glue.h .obj .src *.service +*.pid diff --git a/conf/systemd.service.in b/conf/systemd.service.in index 6116a7e..09ab6cf 100644 --- a/conf/systemd.service.in +++ b/conf/systemd.service.in @@ -1,13 +1,15 @@ [Unit] Description=@PACKAGE_DESCRIPTION@ -After=syslog.target network.target +After=syslog.target network.target dbus.service [Service] -ExecStart=/usr/sbin/@PACKAGE_NAME@ -Type=forking +ExecStart=/usr/sbin/@PACKAGE_NAME@ --daemon +Type=dbus +BusName=br.com.bb.pw3270.service PIDFile=/var/run/@PACKAGE_NAME@.pid KillMode=process Restart=on-failure [Install] WantedBy=default.target + diff --git a/src/main.c b/src/main.c index 680b092..c557480 100644 --- a/src/main.c +++ b/src/main.c @@ -33,6 +33,7 @@ #include "private.h" #include #include +#include #include #include #include @@ -172,14 +173,40 @@ static void cleanup() { int main(int argc, char *argv[]) { + static gboolean asDaemon = FALSE; + #if defined( HAVE_SYSLOG ) openlog(g_get_prgname(), LOG_NDELAY, LOG_USER); g_log_set_default_handler(g_syslog,NULL); #endif // HAVE_SYSLOG + // Verifica argumentos + static const GOptionEntry app_options[] = { + { "pidfile", 'p', 0, G_OPTION_ARG_STRING, &pidfile, "Path to pidfile" , NULL }, + { "daemon", 'd', 0, G_OPTION_ARG_NONE, &asDaemon, "Run as daemon", NULL }, + { NULL } + }; + + GOptionContext * context = g_option_context_new (PACKAGE_DESCRIPTION); + GError * error = NULL; + GOptionGroup * group = g_option_group_new( PACKAGE_NAME, NULL, NULL, NULL, NULL); + + g_option_context_set_main_group(context, group); + g_option_context_add_main_entries(context, app_options, NULL); + if(!g_option_context_parse( context, &argc, &argv, &error )) { + fprintf(stderr,"%s\n",error->message); + exit(-1); + } + + // Inicia serviços initialize(); init_3270(); + if(asDaemon && daemon(0,0)) { + fprintf(stderr,"%s\n",strerror(errno)); + exit(-1); + } + atexit(cleanup); if(pidfile) { FILE * hpid = fopen(pidfile,"w"); -- libgit2 0.21.2