2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 2
|
2008-12-21 00:39:55 +00:00
|
|
|
-/*
|
|
|
|
+/**
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 20
|
2008-12-21 00:39:55 +00:00
|
|
|
-if (!defined('LACONICA')) { exit(1); }
|
|
|
|
+if (!defined('LACONICA')) {
|
|
|
|
+ exit(1);
|
|
|
|
+}
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 24
|
|
|
|
-class Daemon {
|
|
|
|
+class Daemon
|
2008-12-21 00:39:55 +00:00
|
|
|
+{
|
2008-12-21 00:46:07 +00:00
|
|
|
+ function name()
|
2008-12-21 00:39:55 +00:00
|
|
|
+ {
|
2008-12-21 00:30:16 +00:00
|
|
|
+ return null;
|
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 31
|
|
|
|
- function name() {
|
2008-12-21 00:39:55 +00:00
|
|
|
- return NULL;
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
-
|
|
|
|
- function background() {
|
|
|
|
- $pid = pcntl_fork();
|
|
|
|
- if ($pid < 0) { # error
|
|
|
|
- common_log(LOG_ERR, "Could not fork.");
|
|
|
|
- return false;
|
|
|
|
- } else if ($pid > 0) { # parent
|
|
|
|
- common_log(LOG_INFO, "Successfully forked.");
|
|
|
|
- exit(0);
|
|
|
|
- } else { # child
|
|
|
|
- return true;
|
|
|
|
- }
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
+ function background()
|
2008-12-21 00:39:55 +00:00
|
|
|
+ {
|
2008-12-21 00:46:07 +00:00
|
|
|
+ $pid = pcntl_fork();
|
|
|
|
+ if ($pid < 0) { // error
|
|
|
|
+ common_log(LOG_ERR, "Could not fork.");
|
|
|
|
+ return false;
|
|
|
|
+ } else if ($pid > 0) { // parent
|
|
|
|
+ common_log(LOG_INFO, "Successfully forked.");
|
|
|
|
+ exit(0);
|
|
|
|
+ } else { // child
|
|
|
|
+ return true;
|
|
|
|
+ }
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 45
|
|
|
|
- function alreadyRunning() {
|
|
|
|
+ function alreadyRunning()
|
|
|
|
+ {
|
|
|
|
+ $pidfilename = $this->pidFilename();
|
|
|
|
hunk ./lib/daemon.php 49
|
|
|
|
- $pidfilename = $this->pidFilename();
|
|
|
|
+ if (!$pidfilename) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
hunk ./lib/daemon.php 53
|
|
|
|
- if (!$pidfilename) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!file_exists($pidfilename)) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- $contents = file_get_contents($pidfilename);
|
|
|
|
- if (posix_kill(trim($contents),0)) {
|
|
|
|
- return true;
|
2008-12-21 00:30:16 +00:00
|
|
|
- } else {
|
2008-12-21 00:46:07 +00:00
|
|
|
- return false;
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
-
|
|
|
|
- function writePidFile() {
|
|
|
|
- $pidfilename = $this->pidFilename();
|
|
|
|
-
|
|
|
|
- if (!$pidfilename) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return file_put_contents($pidfilename, posix_getpid() . "\n");
|
|
|
|
- }
|
|
|
|
+ if (!file_exists($pidfilename)) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ $contents = file_get_contents($pidfilename);
|
|
|
|
+ if (posix_kill(trim($contents), 0)) {
|
|
|
|
+ return true;
|
2008-12-21 00:30:16 +00:00
|
|
|
+ } else {
|
2008-12-21 00:46:07 +00:00
|
|
|
+ return false;
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 64
|
|
|
|
- function clearPidFile() {
|
|
|
|
- $pidfilename = $this->pidFilename();
|
|
|
|
- if (!$pidfilename) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- return unlink($pidfilename);
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
-
|
|
|
|
- function pidFilename() {
|
|
|
|
- $piddir = common_config('daemon', 'piddir');
|
|
|
|
- if (!$piddir) {
|
|
|
|
- return NULL;
|
2008-12-21 00:39:55 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
- $name = $this->name();
|
|
|
|
- if (!$name) {
|
|
|
|
- return NULL;
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
- return $piddir . '/' . $name . '.pid';
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
+ function writePidFile()
|
|
|
|
+ {
|
|
|
|
+ $pidfilename = $this->pidFilename();
|
|
|
|
hunk ./lib/daemon.php 68
|
|
|
|
- function changeUser() {
|
|
|
|
+ if (!$pidfilename) {
|
|
|
|
+ return false;
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 72
|
|
|
|
- $username = common_config('daemon', 'user');
|
|
|
|
-
|
|
|
|
- if ($username) {
|
|
|
|
- $user_info = posix_getpwnam($username);
|
|
|
|
- if (!$user_info) {
|
|
|
|
- common_log(LOG_WARNING, 'Ignoring unknown user for daemon: ' . $username);
|
|
|
|
- } else {
|
|
|
|
- common_log(LOG_INFO, "Setting user to " . $username);
|
|
|
|
- posix_setuid($user_info['uid']);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
+ return file_put_contents($pidfilename, posix_getpid() . "\n");
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
hunk ./lib/daemon.php 75
|
|
|
|
- $groupname = common_config('daemon', 'group');
|
|
|
|
-
|
|
|
|
- if ($groupname) {
|
|
|
|
- $group_info = posix_getgrnam($groupname);
|
|
|
|
- if (!$group_info) {
|
|
|
|
- common_log(LOG_WARNING, 'Ignoring unknown group for daemon: ' . $groupname);
|
|
|
|
- } else {
|
|
|
|
- common_log(LOG_INFO, "Setting group to " . $groupname);
|
|
|
|
- posix_setgid($group_info['gid']);
|
|
|
|
- }
|
|
|
|
- }
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
-
|
|
|
|
- function runOnce() {
|
|
|
|
- if ($this->alreadyRunning()) {
|
|
|
|
- common_log(LOG_INFO, $this->name() . ' already running. Exiting.');
|
|
|
|
- exit(0);
|
|
|
|
- }
|
|
|
|
- if ($this->background()) {
|
|
|
|
- $this->writePidFile();
|
|
|
|
- $this->changeUser();
|
|
|
|
- $this->run();
|
|
|
|
- $this->clearPidFile();
|
2008-12-21 00:30:16 +00:00
|
|
|
- }
|
|
|
|
- }
|
2008-12-21 00:46:07 +00:00
|
|
|
-
|
|
|
|
- function run() {
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
+ function clearPidFile()
|
|
|
|
+ {
|
|
|
|
+ $pidfilename = $this->pidFilename();
|
|
|
|
+ if (!$pidfilename) {
|
2008-12-21 00:39:55 +00:00
|
|
|
+ return false;
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
+ return unlink($pidfilename);
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
+
|
|
|
|
+ function pidFilename()
|
2008-12-21 00:39:55 +00:00
|
|
|
+ {
|
2008-12-21 00:46:07 +00:00
|
|
|
+ $piddir = common_config('daemon', 'piddir');
|
|
|
|
+ if (!$piddir) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ $name = $this->name();
|
|
|
|
+ if (!$name) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ return $piddir . '/' . $name . '.pid';
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
+
|
|
|
|
+ function changeUser()
|
2008-12-21 00:39:55 +00:00
|
|
|
+ {
|
2008-12-21 00:46:07 +00:00
|
|
|
+ $username = common_config('daemon', 'user');
|
|
|
|
+
|
|
|
|
+ if ($username) {
|
|
|
|
+ $user_info = posix_getpwnam($username);
|
|
|
|
+ if (!$user_info) {
|
|
|
|
+ common_log(LOG_WARNING,
|
|
|
|
+ 'Ignoring unknown user for daemon: ' . $username);
|
|
|
|
+ } else {
|
|
|
|
+ common_log(LOG_INFO, "Setting user to " . $username);
|
|
|
|
+ posix_setuid($user_info['uid']);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $groupname = common_config('daemon', 'group');
|
|
|
|
+
|
|
|
|
+ if ($groupname) {
|
|
|
|
+ $group_info = posix_getgrnam($groupname);
|
|
|
|
+ if (!$group_info) {
|
|
|
|
+ common_log(LOG_WARNING,
|
|
|
|
+ 'Ignoring unknown group for daemon: ' . $groupname);
|
|
|
|
+ } else {
|
|
|
|
+ common_log(LOG_INFO, "Setting group to " . $groupname);
|
|
|
|
+ posix_setgid($group_info['gid']);
|
|
|
|
+ }
|
|
|
|
+ }
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
+
|
|
|
|
+ function runOnce()
|
2008-12-21 00:39:55 +00:00
|
|
|
+ {
|
2008-12-21 00:46:07 +00:00
|
|
|
+ if ($this->alreadyRunning()) {
|
|
|
|
+ common_log(LOG_INFO, $this->name() . ' already running. Exiting.');
|
|
|
|
+ exit(0);
|
|
|
|
+ }
|
|
|
|
+ if ($this->background()) {
|
|
|
|
+ $this->writePidFile();
|
|
|
|
+ $this->changeUser();
|
|
|
|
+ $this->run();
|
|
|
|
+ $this->clearPidFile();
|
2008-12-21 00:30:16 +00:00
|
|
|
+ }
|
|
|
|
+ }
|
2008-12-21 00:46:07 +00:00
|
|
|
+
|
|
|
|
+ function run()
|
2008-12-21 00:39:55 +00:00
|
|
|
+ {
|
2008-12-21 00:46:07 +00:00
|
|
|
+ return true;
|
2008-12-21 00:23:32 +00:00
|
|
|
+ }
|