Ejemplo n.º 1
0
static int init_glog()
{
	char *logname = myconfig_get_value("log_main_logname");
	if (!logname)
		logname = "./main_log.log";

	char *cloglevel = myconfig_get_value("log_main_loglevel");
	int loglevel = LOG_NORMAL;
	if (cloglevel)
		loglevel = getloglevel(cloglevel);
	int logsize = myconfig_get_intval("log_main_logsize", 100);
	int logintval = myconfig_get_intval("log_main_logtime", 3600);
	int lognum = myconfig_get_intval("log_main_lognum", 10);
	glogfd = registerlog(logname, loglevel, logsize, logintval, lognum);
	return glogfd;
}
Ejemplo n.º 2
0
int daemon_start(int argc, char **argv){
	
	if(!myconfig_get_intval("foreground", 0)) {	
		printf("Switching to background\n");
		if(getppid() != 1)
			daemon(1, 1);
	}

	struct sigaction sa;
	sigset_t sset;
	memset(&sa, 0, sizeof(sa));
	sa.sa_handler = sigterm_handler;
	sigaction(SIGINT, &sa, NULL);
	sigaction(SIGTERM, &sa, NULL);
	sigaction(SIGQUIT, &sa, NULL);

	sa.sa_handler = nop_handler;
	sigaction(SIGIO, &sa, NULL);
	sigaction(SIGALRM, &sa, NULL);

	sa.sa_handler = sighup_handler;
	sigaction(SIGHUP, &sa, NULL);
	
	sa.sa_handler = reload_handler;
	sigaction(SIGUSR1, &sa, NULL);

	signal(SIGPIPE, SIG_IGN);
	signal(SIGXFSZ, SIG_IGN);
	signal(SIGCHLD, SIG_DFL);

	sigemptyset(&sset);
	sigaddset(&sset, SIGSEGV);
	sigaddset(&sset, SIGBUS);
	sigaddset(&sset, SIGABRT);
	sigaddset(&sset, SIGILL);
	sigaddset(&sset, SIGCHLD);
	sigaddset(&sset, SIGFPE);
	sigaddset(&sset, SIGHUP);
	sigaddset(&sset, SIGTERM);
	sigaddset(&sset, SIGINT);
	sigaddset(&sset, SIGQUIT);
	sigprocmask(SIG_UNBLOCK, &sset, &sset);

	arg_start = argv[0];
	arg_end = argv[argc - 1] + strlen(argv[argc - 1]) + 1;
	env_start = environ[0];

	dup_argv(argc, argv);

	if(progname == NULL || saved_argv == NULL) {
		printf("can't resolve executable path, restart not support\n");
		signal(SIGHUP, sigterm_handler);
	}

	return 0;
}
Ejemplo n.º 3
0
static int init_redis()
{
	char *ip = myconfig_get_value("redis_server");
	if (ip == NULL)
	{
		LOG(vfs_http_log, LOG_ERROR, "config have not redis_server!\n");
		return -1;
	}
    return redis_connect(ip, myconfig_get_intval("redis_port", 16379));
}
Ejemplo n.º 4
0
int init_r_to()
{
	threadcount = myconfig_get_intval("http_threadcount", 4);
	allto = (list_head_t *) malloc (sizeof(list_head_t) * threadcount);
	if (allto == NULL)
	{
		LOG(cdc_r_log, LOG_ERROR, "malloc ERR %m!\n");
		return -1;
	}
	return 0;
}
Ejemplo n.º 5
0
static int init_shm(t_path_info * path)
{
	if (link_cdc_write() == 0)
		return 1;
	LOG(fplog, LOG_NORMAL, "link_cdc_write err %m, try init from file!\n");
	char file[256] = {0x0};
	if (get_last_sync_file(path, file, sizeof(file)))
	{
		size_t nodesize = myconfig_get_intval("shm_nodecount", DEFAULT_NODE);
		LOG(fplog, LOG_NORMAL, "get_last_sync_file err %m, try create now nodecount = %ld!\n", nodesize);
		return link_cdc_create(nodesize);
	}

	LOG(fplog, LOG_NORMAL, "prepare cdc_restore_data from %s\n", file);
	return cdc_restore_data(file);
}
Ejemplo n.º 6
0
int main(int argc, char **argv) {
	if(parse_args(argc, argv))
		return 0;
	int err = 0;
	printf("Starting Server %s (%s)...%ld\n", version_string, compiling_date, nowtime());
	if(myconfig_init(argc, argv) < 0) {
		printf("myconfig_init fail %m\n");
		goto error;
	}
	daemon_start(argc, argv);
	umask(0);
	ICALL(init_log);
	ICALL(init_glog);
	ICALL(init_fdinfo);
	ICALL(delay_task_init);
	ICALL(init_thread);
	ICALL(init_global);
	ICALL(vfs_init);
	ICALL(init_task_info);
	ICALL(init_file_filter);
	ICALL(init_tc);
	if (get_self_info(&self_ipinfo))
	{
		LOG(glogfd, LOG_NORMAL, "get_self_role ERR!\n");
		self_ipinfo.role = ROLE_FCS;
	}
	if (self_ipinfo.role <= UNKOWN || self_ipinfo.role >= SELF_IP)
	{
		LOG(glogfd, LOG_ERROR, "get_self_role ERR!\n");
		fprintf(stderr, "get_self_role ERR!\n");
		goto error;
	}
	if (self_ipinfo.role != ROLE_VOSS_MASTER)
		ICALL(init_vfs_agent);
	char *srole = iprole[self_ipinfo.role];
	LOG(glogfd, LOG_NORMAL, "MY ROLE is %s\n", srole);

	t_thread_arg arg;
	memset(&arg, 0, sizeof(arg));
	snprintf(arg.name, sizeof(arg.name), "./%s_client.so", srole);
	LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg.name);
	if (ROLE_FCS != self_ipinfo.role)
	{
		arg.port = g_config.sig_port;
		arg.flag = 1;
	}
	arg.maxevent = myconfig_get_intval("vfs_sig_maxevent", 4096);
	if (init_vfs_thread(&arg))
		goto error;
	t_thread_arg arg1;
	memset(&arg1, 0, sizeof(arg1));
	snprintf(arg1.name, sizeof(arg1.name), "./%s_http.so", srole);
	LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg1.name);
	arg1.maxevent = myconfig_get_intval("vfs_data_maxevent", 4096);
	if (init_vfs_thread(&arg1))
		goto error;
	thread_jumbo_title();
	struct threadstat *thst = get_threadstat();
	if(start_threads() < 0)
		goto out;
	thread_reached(thst);
	gen_pidfile();	
	printf("Server Started\n");
	vfs_start_time = time(NULL);
	main_loop(thst);
out:
	printf("Stopping Server %s (%s)...\n", version_string, compiling_date);
	thread_reached(thst);
	stop_threads();
	myconfig_cleanup();
	fini_fdinfo();
	printf("Server Stopped.\n");
	return restart;
error:
	if(err == -ENOMEM) 
		printf("\n\033[31m\033[1mNO ENOUGH MEMORY\033[0m\n");
	
	printf("\033[31m\033[1mStart Fail.\033[0m\n");
	return -1;
}
Ejemplo n.º 7
0
int main(int argc, char **argv) {
	if(parse_args(argc, argv))
		return 0;
	int err = 0;
	printf("Starting Server %s (%s)...%ld\n", version_string, compiling_date, nowtime());
	if(myconfig_init(argc, argv) < 0) {
		printf("myconfig_init fail %m\n");
		goto error;
	}
	daemon_start(argc, argv);
	umask(0);
	ICALL(start_watchdog);
	ICALL(init_log);
	ICALL(init_glog);
	ICALL(init_fdinfo);
	ICALL(delay_task_init);
	ICALL(init_thread);
	ICALL(init_global);
	ICALL(vfs_init);
	ICALL(init_task_info);

	if (g_config.voss_flag == 0)
	{
		t_thread_arg arg;
		memset(&arg, 0, sizeof(arg));
		snprintf(arg.name, sizeof(arg.name), "./ott_server.so");
		LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg.name);
		arg.port = 80;
		arg.maxevent = myconfig_get_intval("vfs_sig_maxevent", 4096);
		if (init_vfs_thread(&arg))
			goto error;
		t_thread_arg arg1;
		memset(&arg1, 0, sizeof(arg1));
		snprintf(arg1.name, sizeof(arg1.name), "./ott_client.so");
		LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg1.name);
		arg1.maxevent = myconfig_get_intval("vfs_data_maxevent", 4096);
		if (init_vfs_thread(&arg1))
			goto error;
		ICALL(init_vfs_agent);
	}
	else
	{
		t_thread_arg arg;
		memset(&arg, 0, sizeof(arg));
		snprintf(arg.name, sizeof(arg.name), "./ott_voss.so");
		LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg.name);
		arg.port = g_config.sig_port;
		arg.maxevent = myconfig_get_intval("vfs_sig_maxevent", 4096);
		if (init_vfs_thread(&arg))
			goto error;
	}
	thread_jumbo_title();
	struct threadstat *thst = get_threadstat();
	if(start_threads() < 0)
		goto out;
	thread_reached(thst);
	gen_pidfile();	
	printf("Server Started\n");
	vfs_start_time = time(NULL);
	main_loop(thst);
out:
	printf("Stopping Server %s (%s)...\n", version_string, compiling_date);
	thread_reached(thst);
	stop_threads();
	myconfig_cleanup();
	fini_fdinfo();
	printf("Server Stopped.\n");
	return restart;
error:
	if(err == -ENOMEM) 
		printf("\n\033[31m\033[1mNO ENOUGH MEMORY\033[0m\n");

	printf("\033[31m\033[1mStart Fail.\033[0m\n");
	return -1;
}
Ejemplo n.º 8
0
int init_para(t_path_info * path)
{
	char *v = myconfig_get_value("log_logname");
	if (v == NULL)
	{
		fprintf(stderr, "config have not logname!\n");
		return -1;
	}
	char *logfile = v;
	int loglevel = getloglevel(myconfig_get_value("log_loglevel"));
	int logsize = myconfig_get_intval("log_logsize", 100);
	int logtime = myconfig_get_intval("log_logtime", 3600);
	int logcount = myconfig_get_intval("log_logcount", 10);

	if (init_log())
	{
		fprintf(stderr, "init log error %m\n");
		return -1;
	}

	fplog = registerlog(logfile, loglevel, logsize, logtime, logcount);
	if (fplog < 0)
	{
		fprintf(stderr, "registerlog %s %m\n", logfile);
		return -1;
	}

	v = myconfig_get_value("path_workdir");
	if (v == NULL)
	{
		LOG(fplog, LOG_ERROR, "config have not path_workdir!\n");
		return -1;
	}
	snprintf(path->workdir, sizeof(path->workdir), "%s", v);

	v = myconfig_get_value("path_indir");
	if (v == NULL)
	{
		LOG(fplog, LOG_ERROR, "config have not path_indir!\n");
		return -1;
	}
	snprintf(path->indir, sizeof(path->indir), "%s", v);

	v = myconfig_get_value("path_outdir");
	if (v == NULL)
	{
		LOG(fplog, LOG_ERROR, "config have not path_outdir!\n");
		return -1;
	}
	snprintf(path->outdir, sizeof(path->outdir), "%s", v);

	v = myconfig_get_value("path_bkdir");
	if (v == NULL)
	{
		LOG(fplog, LOG_ERROR, "config have not path_bkdir!\n");
		return -1;
	}
	snprintf(path->bkdir, sizeof(path->bkdir), "%s", v);

	v = myconfig_get_value("path_fulldir");
	if (v == NULL)
	{
		LOG(fplog, LOG_ERROR, "config have not path_fulldir!\n");
		return -1;
	}
	snprintf(path->fulldir, sizeof(path->fulldir), "%s", v);

	v = myconfig_get_value("path_tmpdir");
	if (v == NULL)
	{
		LOG(fplog, LOG_ERROR, "config have not path_tmpdir!\n");
		return -1;
	}
	snprintf(path->tmpdir, sizeof(path->tmpdir), "%s", v);

	memset(taskfile_prefix, 0, sizeof(taskfile_prefix));
	v = myconfig_get_value("path_taskfile_prefix");
	if (v == NULL)
		snprintf(taskfile_prefix, sizeof(taskfile_prefix), "%s", "/home/webadm/");
	else
		snprintf(taskfile_prefix, sizeof(taskfile_prefix), "%s", v);
	prefix_len = strlen(taskfile_prefix);
	return 0;
}
Ejemplo n.º 9
0
int main(int argc, char **argv)
{
	if (argc > 1)
	{
		if (strcasecmp(argv[1], "-v") == 0)
		{
			fprintf(stdout, "compile time [%s %s]\n", __DATE__, __TIME__);
			return -1;
		}
	}

	if (myconfig_init(argc, argv))
	{
		fprintf(stderr, "myconfig_init error [%s]\n", strerror(errno));
		return -1;
	}

	EnterDaemonMode();
	t_path_info path;
	memset(&path, 0, sizeof(path));

	if (init_para(&path))
		return -1;

	int ret = init_shm(&path);
	if (ret < 0)
	{
		LOG(fplog, LOG_ERROR, "init_shm err %m\n");
		report_2_nm(CDC_SHM_INIT_ERR, ID, LN);
		return -1;
	}

	LOG(fplog, LOG_NORMAL, "cdc start ok!\n");
	if (ret == 0 )
	{
		if (cdc_sub(&path, CDC_PLUS))
		{
			LOG(fplog, LOG_ERROR, "init_plus err %m\n");
			report_2_nm(CDC_NORMAL_ERR, ID, LN);
			return -1;
		}
	}
	LOG(fplog, LOG_NORMAL, "plus dir process ok!\n");

	time_t cur = time(NULL);
	time_t last = 0;
	int shm_sync_time = myconfig_get_intval("shm_synctime", 3600);

	while (1)
	{
		cdc_sub(&path, CDC_REALTIME);
		cur = time(NULL);
		if (cur - last >= shm_sync_time)
		{
			last = cur;
			do_sync_2_disk(&path);
		}
		sleep(10);
	}

	logclose(fplog);
	return 0;
}