Supervisor踩過的坑


系統環境 centos 7.6.1810 ,用的是阿里雲的服務器
yum update最新版本,先更新到最新的。系統已安裝好寶塔6.9最新免費版本

先說正常安裝的情況下
1.安裝
yum install supervisor
2.指定配置
mkdir /etc/supervisor
新建指定目錄,為了避免默認配置會在某些更新覆蓋掉
echo_supervisord_conf > /etc/supervisor/supervisord.conf
這里是在新建好的目錄新建conf文件,這里關鍵。默認文件會建立在/etc目錄下

3.配置文件修改
配置文件,主要變更如下

[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))

配置最下面

[include]
files = conf.d/*.conf

當然,這里沒指定路徑,可以直接把配置放下面
里面的conf文件可以隨意添加多個。
舉例,其中一個cfwebapp.conf文件,內容如下

[program:Cf.FileApp]
command=dotnet Cf.FileApp.dll ; 運行程序的命令
directory=/www/wwwroot/Cf.FileApp/ ; 命令執行的目錄
autorestart=true ; 程序意外退出是否自動重啟
stderr_logfile=/var/log/AnuoApc.err.log ; 錯誤日志文件
stdout_logfile=/var/log/AnuoApc.out.log ; 輸出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環境變量
user=root ; 進程執行的用戶身份
stopsignal=INT

4.配置服務文件
/usr/lib/systemd/system/下,新建supervisord.service文件。
這里關鍵,是supervisord文件,建過了supervisor.service文件,配的是supervisord文件,結果導致其實2個不同的啟動文件,結果后面造成了設置的混亂。

文件內容如下:

# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

5.開機啟動
supervisorctl start all
systemctl enable supervisord
設置啟動supervisor
驗證是否開機啟動:
systemctl is-enabled supervisord

如果沒意外情況,這樣啟動已經可以配置和啟動完畢

6.遇到的坑
但是,通常不同服務器,甚至同一個centos鏡像(centos版本一樣)出來的應用實例
安裝還是會遇到不同的問題。
解決辦法第一先冷靜,centos工具,通常某些配置配錯了,打錯了等等,導致整個配置跟着錯,可以按一下步驟重復繼續進行。

如果報錯沒正常顯示
如果路徑指錯了或者要變更,
supervisorctl reload
當然,reload等於把supervisor服務重新加載。效果是如果有部分服務已經刪除了,reload會去掉不存在的服務,再
supervisorctl restart all就會看到掛載的服務先停止了,再全部啟動了。

如上面都出現錯誤信息,可以接着
systemctl daemon-reload
把整個啟動模版都重載一下,這樣重載后,
重新指定 echo_supervisord_conf > /etc/supervisor/supervisord.conf
等於重復步驟2,直到supervisorctl reload 提示success

服務啟動后可以用
systemctl status supervisord.service
查看這個服務的狀態

● supervisord.service - Supervisor daemon
Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2019-06-09 22:16:19 CST; 26s ago
Main PID: 2678 (supervisord)
Tasks: 17
Memory: 142.3M
CGroup: /system.slice/supervisord.service
├─2678 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
└─3095 dotnet Cf.FileApp.dll

一般active綠色為已激活狀態,服務正常運行,服務所啟動的進程如下
/etc/supervisor/supervisord.conf 為服務用到的配置文件。


解決unix:///tmp/supervisor.sock no such file的問題
這個問題發生在配置更改或者指定服務路徑等匹配不了的時候,默認tmp會存儲supervisor一些緩存日志和加鎖的文件,而tmp是臨時目錄,會特定時候觸發清理或者丟失,在這樣情況下,就會報no such file了。所以把這2種文件指定到非臨時目錄

1、打開配置文件

vim /etc/supervisor/supervisord.conf
這里把所有的/tmp路徑改掉,/tmp/supervisor.sock 改成 /var/run/supervisor.sock,/tmp/supervisord.log 改成 /var/log/supervisor.log,/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自動清掉

2、修改權限

sudo chmod 777 /run
sudo chmod 777 /var/log
如果沒改,啟動報錯 IOError: [Errno 13] Permission denied: '/var/log/supervisord.log'

3、創建supervisor.sock

sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
4、啟動supervisord,注意stop之前的實例或殺死進程
ps ax | grep supervisord

supervisord

然后重復reload,restart等之前的步驟

最后,如果還運行不了,需重啟reboot一下服務器。服務器reboot不是必須,是驗證和重新加載supervisord.service服務的關鍵,有時整個安裝或者重設流程混亂了,重啟一下。一切都正常了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM