编辑配置service文件问题
问题描述:
写.service文件后,运行systemctl stop pro.serivce,卡住
尝试1.
[Service]
Type=forking
NotifyAccess=all
TimeoutStartSec=0
User=root
ExecStart=/usr/bin/project_start.sh start
可以正常启动
但是重启和停止会卡住
尝试2
[Service]
Type=forking
NotifyAccess=all
TimeoutStartSec=0
User=root
ExecStart=/usr/bin/project_start.sh start
ExecStop=/usr/bin/project_start.sh stop
ExecRestart=/usr/bin/project_start.sh restart
可以正常启动一次,正常停止一次,再次启动报错,uwsgi.log中 uwsgi no app load
尝试3
[Service]
Type=simple
NotifyAccess=all
TimeoutStartSec=0
User=root
ExecStart=/usr/bin/project_start.sh start
ExecStop=/usr/bin/project_start.sh stop
ExecRestart=/usr/bin/project_start.sh restart
[Service]
Type=forking
NotifyAccess=all
TimeoutStartSec=0
User=root
ExecStart=/usr/local/bin/uwsgi --ini /usr/lib/python3.6/site-packages/project_django/deploy/uwsgi_deploy.ini
ExecStop=/usr/local/bin/uwsgi --stop /var/run/project_django.pid
ExecRestart=/usr/local/bin/uwsgi --reload /var/run/project_django.pid
启动提示unable to load app 0 (mountpoint='') (callable not found or import error)
加上pidfile,在forking类型可以正常stop
[Unit]
Description=mimic uwsgi service
[Service]
Type=forking
PIDFile=/var/run/project_django.pid
NotifyAccess=all
TimeoutStartSec=0
User=root
ExecStart=/usr/bin/django_project.sh start
ExecReload=/usr/bin/django_project.sh restart
ExecStop=/usr/bin/django_project.sh stop
ExecStopPost=ps aux | grep uwsgi_deploy | grep -v grep | awk '{print $2}' | xargs kill -9
ExecStartPre=/usr/bin/django_project.sh start
[Install]
WantedBy=multi-user.target
参考:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
https://blog.51cto.com/gaowenlong/1715070
当只是执行一个脚本,不涉及服务如uwsgi、celery等,type可以用simple
当执行的脚本需要运行服务,选forking, 并且指定pidfile项
Type=oneshot | 这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。 |
---|---|
Type=notify | 与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。 |
Type=dbus | 若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。 |
Type=idle | systemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。 |
Type=forking | systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程 |
Type=simple | (默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。 |