enable foreground mode for services (#7061)
Authored-by: Tim Fry <tim@fusionpbx.com>
This commit is contained in:
parent
2b3381f95c
commit
f80347504a
|
|
@ -78,6 +78,12 @@ abstract class service {
|
|||
*/
|
||||
protected static $config_file = "";
|
||||
|
||||
/**
|
||||
* Fork the service to it's own process ID
|
||||
* @var bool
|
||||
*/
|
||||
protected static $forking_enabled = true;
|
||||
|
||||
/**
|
||||
* Child classes must provide a mechanism to reload settings
|
||||
*/
|
||||
|
|
@ -199,6 +205,12 @@ abstract class service {
|
|||
* @return void
|
||||
*/
|
||||
protected static function parse_service_command_options(): void {
|
||||
|
||||
//ensure we have a PID so that reload and exit send commands work
|
||||
if (empty(self::$pid_file)) {
|
||||
self::$pid_file = self::get_pid_filename();
|
||||
}
|
||||
|
||||
//base class short options
|
||||
self::$available_command_options = self::base_command_options();
|
||||
|
||||
|
|
@ -402,8 +414,13 @@ abstract class service {
|
|||
$level = self::$log_level;
|
||||
}
|
||||
|
||||
//enable sending message to the console directly
|
||||
if (self::$log_level === LOG_DEBUG || !self::$forking_enabled) {
|
||||
echo $message . "\n";
|
||||
}
|
||||
|
||||
// Log the message to syslog
|
||||
syslog($level, 'fusionpbx[' . posix_getpid() . ']: ['.self::class.'] '.$message);
|
||||
syslog($level, 'fusionpbx[' . posix_getpid() . ']: ['.static::class.'] '.$message);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -583,6 +600,13 @@ abstract class service {
|
|||
$help_options[$index]['long_description'] = '--config <path>';
|
||||
$help_options[$index]['functions'][] = 'set_config_file';
|
||||
$index++;
|
||||
$help_options[$index]['short_option'] = '1';
|
||||
$help_options[$index]['long_option'] = 'no-fork';
|
||||
$help_options[$index]['description'] = 'Do not fork the process';
|
||||
$help_options[$index]['short_description'] = '-1';
|
||||
$help_options[$index]['long_description'] = '--no-fork';
|
||||
$help_options[$index]['functions'][] = 'set_no_fork';
|
||||
$index++;
|
||||
$help_options[$index]['short_option'] = 'x';
|
||||
$help_options[$index]['long_option'] = 'exit';
|
||||
$help_options[$index]['description'] = 'Exit the service gracefully';
|
||||
|
|
@ -593,6 +617,14 @@ abstract class service {
|
|||
return $help_options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set to not fork when started
|
||||
*/
|
||||
public static function set_no_fork() {
|
||||
echo "Running in forground\n";
|
||||
self::$forking_enabled = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the configuration file location to use for a config object
|
||||
*/
|
||||
|
|
@ -704,17 +736,21 @@ abstract class service {
|
|||
//can only start from command line
|
||||
defined('STDIN') or die('Unauthorized');
|
||||
|
||||
//force launching in a seperate process
|
||||
if ($pid = pcntl_fork()) {
|
||||
exit;
|
||||
}
|
||||
//parse the cli options and store them statically
|
||||
self::parse_service_command_options();
|
||||
|
||||
if ($cid = pcntl_fork()) {
|
||||
exit;
|
||||
}
|
||||
//fork process
|
||||
if (self::$forking_enabled) {
|
||||
echo "Running in daemon mode\n";
|
||||
//force launching in a seperate process
|
||||
if ($pid = pcntl_fork()) {
|
||||
exit;
|
||||
}
|
||||
|
||||
//set the PID file we will use
|
||||
self::$pid_file = self::get_pid_filename();
|
||||
if ($cid = pcntl_fork()) {
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
//TODO remove updated settings object after merge
|
||||
if (file_exists( __DIR__ . '/settings.php')) {
|
||||
|
|
@ -726,9 +762,6 @@ abstract class service {
|
|||
require_once dirname(__DIR__).'/functions.php';
|
||||
}
|
||||
|
||||
//parse the cli options and store them statically
|
||||
self::parse_service_command_options();
|
||||
|
||||
//create the config object if not already created
|
||||
if (self::$config === null) {
|
||||
self::$config = new config(self::$config_file);
|
||||
|
|
|
|||
Loading…
Reference in New Issue