Socket: Created control socket & pid file directories.
@alejandro-colomar reported an issue on GitHub whereby Unit would fail to start due to not being able to create the control socket (a Unix Domain Socket) 2022/08/05 20:12:22 [alert] 21613#21613 bind(6, unix:/opt/local/unit/var/run/unit/control.unit.sock.tmp) failed (2: No such file or directory) This could happen if the control socket was set to a directory that doesn't exist. A common place to put the control socket would be under /run/unit, and while /run will exist, /run/unit may well not (/run is/should be cleared on each boot). The pid file would also generally go under /run/unit, though this is created after the control socket, however it could go someplace else so we should also ensure its directory exists. This commit will try to create the pid file and control sockets parent directory. In some cases the user will need to ensure that the rest of the path already exists. This adds a new nxt_fs_mkdir_parent() function that given a full path to a file (or directory), strips the last component off before passing the remaining directory path to nxt_fs_mkdir(). Cc: Konstantin Pavlov <thresh@nginx.com> Closes: <https://github.com/nginx/unit/issues/742> Reported-by: Alejandro Colomar <alx@nginx.com> Reviewed-by: Alejandro Colomar <alx@nginx.com> Tested-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
This commit is contained in:
committed by
Andrew Clayton
parent
2e69b7eb57
commit
57fc9201cb
25
src/nxt_fs.c
25
src/nxt_fs.c
@@ -273,6 +273,31 @@ nxt_fs_mkdir_all(const u_char *dir, mode_t mode)
|
||||
}
|
||||
|
||||
|
||||
nxt_int_t
|
||||
nxt_fs_mkdir_parent(const u_char *path, mode_t mode)
|
||||
{
|
||||
char *ptr, *dir;
|
||||
nxt_int_t ret;
|
||||
|
||||
dir = nxt_strdup(path);
|
||||
if (nxt_slow_path(dir == NULL)) {
|
||||
return NXT_ERROR;
|
||||
}
|
||||
|
||||
ret = NXT_OK;
|
||||
|
||||
ptr = strrchr(dir, '/');
|
||||
if (nxt_fast_path(ptr != NULL)) {
|
||||
*ptr = '\0';
|
||||
ret = nxt_fs_mkdir((const u_char *) dir, mode);
|
||||
}
|
||||
|
||||
nxt_free(dir);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static nxt_int_t
|
||||
nxt_fs_mkdir(const u_char *dir, mode_t mode)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user