summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_main_process.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2020-08-13Fixed error handling of prefork callback.Tiago Natel de Moura1-14/+21
Previously, an error during the prefork phase triggered assert: src/nxt_port.c:27 assertion failed: port->pair[0] == -1 and resulted in exiting of the main process. This could be easily reproduced by pushing a configuration with "rootfs", when daemon is running without required permissions.
2020-05-28Added "rootfs" feature.Tiago Natel de Moura1-5/+84
2020-03-09Refactor of process management.Tiago Natel de Moura1-798/+251
The process abstraction has changed to: setup(task, process) start(task, process_data) prefork(task, process, mp) The prefork() occurs in the main process right before fork. The file src/nxt_main_process.c is completely free of process specific logic. The creation of a process now supports a PROCESS_CREATED state. The The setup() function of each process can set its state to either created or ready. If created, a MSG_PROCESS_CREATED is sent to main process, where external setup can be done (required for rootfs under container). The core processes (discovery, controller and router) doesn't need external setup, then they all proceeds to their start() function straight away. In the case of applications, the load of the module happens at the process setup() time and The module's init() function has changed to be the start() of the process. The module API has changed to: setup(task, process, conf) start(task, data) As a direct benefit of the PROCESS_CREATED message, the clone(2) of processes using pid namespaces now doesn't need to create a pipe to make the child block until parent setup uid/gid mappings nor it needs to receive the child pid.
2020-05-14PHP: implemented "targets" option.Valentin Bartenev1-15/+5
This allows to specify multiple subsequent targets inside PHP applications. For example: { "listeners": { "*:80": { "pass": "routes" } }, "routes": [ { "match": { "uri": "/info" }, "action": { "pass": "applications/my_app/phpinfo" } }, { "match": { "uri": "/hello" }, "action": { "pass": "applications/my_app/hello" } }, { "action": { "pass": "applications/my_app/rest" } } ], "applications": { "my_app": { "type": "php", "targets": { "phpinfo": { "script": "phpinfo.php", "root": "/www/data/admin", }, "hello": { "script": "hello.php", "root": "/www/data/test", }, "rest": { "root": "/www/data/example.com", "index": "index.php" }, } } } }
2019-12-24Adding "limits/shm" configuration validation and parsing.Max Romanov1-1/+31
2019-12-06Isolation: allowed the use of credentials with unpriv userns.Tiago Natel1-24/+189
The setuid/setgid syscalls requires root capabilities but if the kernel supports unprivileged user namespace then the child process has the full set of capabilities in the new namespace, then we can allow setting "user" and "group" in such cases (this is a common security use case). Tests were added to ensure user gets meaningful error messages for uid/gid mapping misconfigurations.
2019-12-06Moved credential-related code to nxt_credential.c.Tiago Natel1-3/+2
This is required to avoid include cycles, as some nxt_clone_* functions depend on the credential structures, but nxt_process depends on clone structures.
2019-11-26Refactor of process init.Tiago Natel1-96/+217
Introduces the functions nxt_process_init_create() and nxt_process_init_creds_set().
2019-10-29Process port refactoring.Hong Zhi Dao1-15/+3
- Introduced nxt_runtime_process_port_create(). - Moved nxt_process_use() into nxt_process.c from nxt_runtime.c. - Renamed nxt_runtime_process_remove_pid() as nxt_runtime_process_remove(). - Some public functions transformed to static. This closes #327 issue on GitHub.
2019-10-29Allocating process init struct from runtime memory pool.Max Romanov1-17/+10
This avoids memory leak reports from the address sanitizer.
2019-10-11Fixed passing false in namespace flags.Tiago Natel1-4/+2
This patch closes #328 in github.
2019-10-10Style fixes.Igor Sysoev1-4/+11
2019-09-30Fixed exiting if a signal arrives during discovery.Max Romanov1-35/+38
When Unit starts, the main process waits for module discovery message for a while. If a QUIT signal arrives at this time, the router and controller processes created by main and Unit stay running. Also, the main process doesn't stop them after the second QUIT signal is received in this case.
2019-09-20Removed linux/sched.h include.Tiago Natel1-4/+0
The <sched.h> is already included by nxt_unix.h. This closes #314 PR on GitHub.
2019-09-20Releasing init struct in case of errors.Tiago Natel1-4/+10
Found by Coverity (CID 349485).
2019-09-19Initial applications isolation support using Linux namespaces.Tiago de Bem Natel de Moura1-24/+183
2019-09-18Fixing master process crash after failed fork.Max Romanov1-2/+7
This closes #312 issue on GitHub.
2019-03-11Style.Andrey Zelenkov1-1/+1
2019-02-28Introducing Java Servlet Container beta.Max Romanov1-0/+26
2019-02-18Ignoring HUP signal in main process.Igor Sysoev1-0/+11
2019-01-21Fixed processing Unix listening socket failures.Igor Sysoev1-16/+13
This is related to issue #198 on GitHub.
2018-10-09Renamed "go" application type to "external".Valentin Bartenev1-21/+21
There's nothing specific to Go language. This type of application object can be used to run any external application that utilizes libunit API.
2018-09-20Resetting init->stream for ready process.Max Romanov1-0/+4
Router requests application start by sending port message with application parameters to master. In response router gets application port. Stream id used to link request and response. If application process terminates unexpectedly (e.g. before ready state), it is required to notify router about application start failure. For this purpose stream id is stored in process initialization parameters. Stream id sequentially incremented and starts from 1 in case of router resurrection. New router application start stream id may coincide with stream id of currently running/terminating application processes. In such cases router may receive REMOVE_PID message with same stream id as used in application start request and mistakenly reports application start failure. This commit tries to avoid such errors by resetting stream for processes in ready state.
2018-09-20Controller: certificates storage interface.Valentin Bartenev1-16/+38
2018-09-07Misspelled variable names fixed.Max Romanov1-1/+1
2018-08-10Stopping all application processes if router process dies.Max Romanov1-1/+27
Unit master process restarts the router if the router accidentally dies. New router process receives the configuration from controller and starts configured applications. The information of running applications cannot be transferred to router because currently there is no persistent application identifier. To avoid orphan application processes started by died router, master process stops all currently running applications once it receives SIGCHLD for router process.
2018-06-18Fixed exit status on start failure.Igor Sysoev1-3/+3
This and previous commit close #131 issue on GitHub.
2018-06-18Removing Unix control socket on start failure.Igor Sysoev1-1/+1
The bug had appeared in 5cc5002a788e when process type has been converted to bitmask. This commit reverts the type back to a number. This commit is related to #131 issue on GitHub.
2018-06-07PHP: added setting of php.ini configuration file path.Valentin Bartenev1-0/+6
2018-06-06Go: specifying command line arguments to the executable.Valentin Bartenev1-0/+7
This closes #110 issue on GitHub.
2018-05-29Added version number to main process title.Igor Sysoev1-1/+2
2018-05-28Configuration of environment variables for application processes.Valentin Bartenev1-0/+6
2018-04-11Access log reopening.Valentin Bartenev1-3/+11
2018-04-11Initial access log support.Valentin Bartenev1-0/+37
2018-03-21Added Ruby support.Alexander Borisov1-0/+10
2018-03-05Reduced number of critical log levels.Valentin Bartenev1-19/+15
2018-02-20Removed unwanted assertions.Max Romanov1-2/+3
2018-02-14Fixed race condition while discovering modules.Valentin Bartenev1-0/+9
Previously, the discovery process might exit before the main process received a list of available modules.
2018-02-13Improving configuration field mapping names.Max Romanov1-16/+25
Avoiding word 'common' as too common. Couple of assertions reduced to error messages.
2018-02-09Fixed starting of applications with specified version.Valentin Bartenev1-5/+15
The "type" option can contain version number that need to be cut off before calling nxt_app_parse_type(). The bug was introduced in 4979fe09d9cd.
2018-02-02Fixed typo in assertion statement introduced in 4979fe09d9cd.Max Romanov1-1/+1
Found by Coverity (CID 260375).
2018-01-31Added Perl support.Alexander Borisov1-2/+42
2018-01-29Introducing extended app process management.Max Romanov1-6/+0
- Pre-fork 'processes.spare' application processes; - fork more processes to keep 'processes.spare' idle processes; - fork on-demand up to 'processes.max' count; - scale down idle application processes above 'processes.spare' after 'processes.idle_timeout'; - number of concurrently started application processes also limited by 'processes.spare' (or 1, if spare is 0).
2018-01-24Fixed formatting in nxt_sprintf() and logging.Sergey Kandaurov1-1/+1
2018-01-24Using size_t for the field width type of the "%*s" specifier.Sergey Kandaurov1-6/+8
2018-01-11Changing relative php scripts paths to real ones.Max Romanov1-1/+1
This is required to run phpMyAdmin.
2017-12-28Removed duplicate declaration.Igor Sysoev1-1/+1
2017-11-29Introducing python virtualenv configuration.Max Romanov1-0/+6
New parameter 'home' for python application allows to configure application-specific virtualenv path. This closes #15 issue on GitHub.
2017-11-20Fixing Coverity warnings.Max Romanov1-0/+3
CID 200496 CID 200494 CID 200490 CID 200489 CID 200483 CID 200482 CID 200472 CID 200465
2017-10-19Fixed controller restarting.Valentin Bartenev1-23/+35
Previously, stored configuration wasn't reread on controller process restart, which resulted in segmentation fault.