如何在Centos里面,把.net core程序设为开机自启动
确定你的.net core程序可以在centos手动启动后,下一步,就是把这个程序做成一个服务,让它开机自自动了
1.创建脚本文件
到目录/etc/rc.d/init.d下面,创建一个myserver.sh文件
要用vi生成,从windows生成,拷贝到linux,可能最终会无法启动这个脚本
vi myserver.sh
内容如下:
#!/bin/bash
# chkconfig: 2345 10 30
# description: testServer
dotnet /home/yourapp.dll
#!/bin/bash
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/bash来执行程序。
# chkconfig: 2345 10 30
其中2345是默认启动级别,级别有0-6共7个级别。
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
10是启动优先级,90是停止优先级
如果你把启动优先级设为80,开机的时候,小于80的服务会先启动,直到没有低于80的服务,你的服务才会启动
2.设置脚本文件为可执行
sudo chmod +x myserver.sh
3.激活你的服务脚步
chkconfig --add myserver.sh
chkconfig myserver.sh on
4.测试
用命令启动这个脚本试试看,没有提示错误就是脚本没有问题了
service myserver start
最后重启,发现你的程序已经自动运行了
支持start stop restart
#!/bin/bash # chkconfig: 2345 10 30 # description: Webapi server function start(){ nohup dotnet /data/gateway/JMS.Gateway.dll >/dev/null 2>&1 & } function stop(){ local pid=$(ps aux|grep "dotnet /data/gateway/JMS.Gateway.dll"|grep -v "grep"|awk '{print $2}') if [ "$pid" != "" ];then echo "found $pid --" kill -9 $pid echo "killed service" else echo "no service running" fi } function restart(){ stop start } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') restart ;; *) ;; esac exit 0
方法二、使用Supervisor守护进程
安装supervisor
# epel源
yum
install
epel-release
# 安装supervisor
yum
install
-y supervisor
# 开机自启动
systemctl
enable
supervisord
# 主配置文件
/etc/supervisord
.conf
# 运行程序配置文件夹
/etc/supervisord
.d/
在程序配置文件夹/etc/supervisord.d
中添加test.ini:
[program:test] directory=/home/yourfolder command=dotnet ***.dll autostart=true autorestart=true stderr_logfile=/home/log/error.log stdout_logfile=/home/log/out.log
systemctl stop supervisord
systemctl start supervisord
systemctl status supervisord
# 重新加载配置文件,不影响正在运行的程序 (不要用reload,所有程序都会重启的)
;[program:theprogramname] ;command=/bin/cat ; the program (relative uses PATH, can take args) ;process_name=%(program_name)s ; process_name expr (default %(program_name)s) ;numprocs=1 ; number of processes copies to start (def 1) ;directory=/tmp ; directory to cwd to before exec (def no cwd) ;umask=022 ; umask for process (default None) ;priority=999 ; the relative start priority (default 999) ;autostart=true ; start at supervisord start (default: true) ;startsecs=1 ; # of secs prog must stay up to be running (def. 1) ;startretries=3 ; max # of serial start failures when starting (default 3) ;autorestart=unexpected ; when to restart if exited after running (def: unexpected) ;exitcodes=0,2 ; 'expected' exit codes used with autorestart (default 0,2) ;stopsignal=QUIT ; signal used to kill process (default TERM) ;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) ;stopasgroup=false ; send stop signal to the UNIX process group (default false) ;killasgroup=false ; SIGKILL the UNIX process group (def false) ;user=chrism ; setuid to this UNIX account to run the program ;redirect_stderr=true ; redirect proc stderr to stdout (default false) ;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO ;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;stdout_logfile_backups=10 ; # of stdout logfile backups (0 means none, default 10) ;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) ;stdout_events_enabled=false ; emit events on stdout writes (default false) ;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO ;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10) ;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) ;stderr_events_enabled=false ; emit events on stderr writes (default false) ;environment=A="1",B="2" ; process environment additions (def no adds) ;serverurl=AUTO ; override serverurl computation (childutils)