Linux 守护进程的其他用户运行方式 (linux 以其他用户 运行 守护进程)

守护进程是一种可以在后台运行并监听特定服务或系统事件的程序。在 Linux 系统中,很多服务和应用程序都是以守护进程的方式运行的,如 Apache、 Nginx、MySQL 等等。通常情况下守护进程运行的用户是 root,但是为了安全起见,我们需要将其运行用户修改为普通用户。那么,有哪些呢?

1.修改守护进程配置文件

修改守护进程的配置文件,可以通过编辑配置文件的方式将其运行用户修改为其他用户。以常见的 Nginx 为例,在 /etc/nginx/nginx.conf 文件中将 user 配置项修改为所需用户即可。如下:

“`

user nginx;

“`

修改为:

“`

user test;

“`

2.使用 su 命令或者 sudo 命令

su 命令可以切换到其他用户,运行守护进程程序。当然,也可以使用 sudo 命令以其他用户身份运行程序,这种方式比 su 命令更加安全。比如,当要用 test 用户运行 Nginx 时,可以使用 su 命令:

“`

su – test

nginx

“`

或者使用 sudo 命令:

“`

sudo -u test nginx

“`

3.使用 systemd 用户单位

systemd 是 Linux 系统中常用的系统和服务管理器,它可以启动和管理守护进程、系统服务等等。在 systemd 中,可以使用用户单位来管理守护进程的运行用户。以 Nginx 为例,在 /etc/systemd/system/multi-user.target.wants/nginx.service 中,将 ExecStart 配置项修改为所需用户即可。如下:

“`

ExecStart=/usr/in/nginx -g ‘daemon on; master_process on;’ -c /etc/nginx/nginx.conf -u test

“`

其中 -u 参数指定 Nginx 的运行用户。

4.使用 supervisord

supervisord 是一种进程控制器,可以用来管理和监控进程。它可以将进程以守护进程的方式运行,并指定运行用户。以 Nginx 为例,在 /etc/supervisord.conf 配置文件中,将 Nginx 进程的配置项修改为如下:

“`

[program:nginx]

command=/usr/in/nginx -g ‘daemon on; master_process on;’

directory=/etc/nginx/

user=test

autostart=true

autorestart=true

startsecs=10

stopwtsecs=10

stopasgroup=true

killasgroup=true

redirect_stderr=true

“`

其中 user 参数指定运行用户。

主要有:修改守护进程配置文件、使用 su 命令或者 sudo 命令、使用 systemd 用户单位、使用 supervisord。对于不同的场景和需求,选择不同的方式可以帮助我们更加有效地管理和维护守护进程。同时,也要注意守护进程本身的安全性,避免因为权限问题导致系统或数据的损失。

相关问题拓展阅读:

如何在Linux下用c语言创建守护进程并监控系统运行期间的所有进程

守护进程最重要的特做配性是后模如台运行。在这一点上DOS下的常驻内存程纯码指序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的 文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守 护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端 (通常是shell)执行。

可以分三步来做:

做两个简单的守护进程,并能正常运行

监控进程是否在运行

启动进程

综合起来就可以了,代码如下:

被监控进程thisisatest.c(来自):

#include

#include

#include

#include

#include

#include

#include

#include

void init_daemon()

{

int pid;

int i;

pid=fork();

if(pid0) //父进程退出

    exit(0);

    

setsid(); //使子进程成为组长

pid=fork();

if(pid>0)

    exit(0); //再次退出,使进程不是组长,这样进程就不会打开控制终端

else if(pid=0)

{

time(&t);

fprintf(fp,”current time is:%s\n”,asctime(localtime(&t)));  //转换为本地时间输出

fclose(fp);

}

    }

    return;

}

监控进程monitor.c:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define BUFSZ 150

void init_daemon()

{

int pid;

int i;

pid=fork();

if(pid0) //父进程退出

    exit(0);

setsid(); //使子进程成为组长

pid=fork();

if(pid>0)

    exit(0); //再次退出,使进程不是组长,这样进程就不会打开控制终端

else if(pid=0)

{

count = does_service_work();

time(&t);

if(count>0)

  fprintf(fp,”current time is:%s and the process exists, the count is %d\n”,asctime(localtime(&t)), count);  //转换为本地时间输出

else

{

  fprintf(fp,”current time is:%s and the process does not exist, restart it!\n”,asctime(localtime(&t)));  //转换为本地时间输出

  system(“/home/user/daemon/thisisatest”); //启动服务

}

fclose(fp);

}

    }

    return;

}

具体CMD命令:

cc thisisatest.c -o thisisatest

./thisisatest

cc monitor.c -o monitor

./monitor

tail -f testfork3.log   — 查看日志

Linux 下的守护进程是怎么保证它一直运行的

在Linux/UNIX系统引导兆清的时候会开启很多服务,这些服务称为守护进程(也叫Daemon进程)。守护进程是脱离于控制终端并且在后台周期性地执行某种任务或等待处理某些事件的进歼吵程,脱离终端是为了避免进程在执行过程中的信息在氏猜侍任何终端上显示并且进程也不会被任何终端所产生的中断信息所终止。

linux 以其他用户 运行 守护进程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 以其他用户 运行 守护进程,Linux 守护进程的其他用户运行方式,如何在Linux下用c语言创建守护进程并监控系统运行期间的所有进程,Linux 下的守护进程是怎么保证它一直运行的的信息别忘了在本站进行查找喔。


数据运维技术 » Linux 守护进程的其他用户运行方式 (linux 以其他用户 运行 守护进程)