Closed paulqi closed 5 years ago
在centos 7 里直接使用startup.sh和stop.sh启动没问题,可是使用systemd 不行,启动起来就挂掉了
对这块不是很熟,可以考虑提交一个PR给我
修改 startup.sh 文件,在底部添加 tail -f /dev/null
命令。
type=simple 改成type=forking 就可以
修改 startup.sh 文件,在底部添加
tail -f /dev/null
命令。
这个方案有效,请教下,为什么不加的时候无法启动?加完后可以启动?
type=simple 改成type=forking 就可以
这个方案也可以,请教下,使用simple的时候为什么会退出?
startup.sh 是把canal放到后台启动,然后脚本退出。 systemd是保证追踪的进程是存在的(进程是运行的),type=simple追踪的是启动进程(脚本的pid),脚本退出后,systemd判断为启动失败;forking就是追踪脚本fork出来的进程(canal 的pid),不管启动脚本是否退出。
如果 你尝试用supervisord, 会了解startup.sh 需要用exec +启动命令 。 exec就是用新进程代替当前进程,但是pid不变。
tail -f /dev/null 起的作用就是,后台fork子进程canal,tail -f 是保证当前脚本不退出。systemd的killmode默认是control-group,所以stop时 会停tail -f ,也会停子进程 canal。
可以搜索下 nohup vs. exec systemd 的 type参数 、killmode
startup.sh 是把canal放到后台启动,然后脚本退出。 systemd是保证追踪的进程是存在的(进程是运行的),type=simple追踪的是启动进程(脚本的pid),脚本退出后,systemd判断为启动失败;forking就是追踪脚本fork出来的进程(canal 的pid),不管启动脚本是否退出。
如果 你尝试用supervisord, 会了解startup.sh 需要用exec +启动命令 。 exec就是用新进程代替当前进程,但是pid不变。
tail -f /dev/null 起的作用就是,后台fork子进程canal,tail -f 是保证当前脚本不退出。systemd的killmode默认是control-group,所以stop时 会停tail -f ,也会停子进程 canal。
可以搜索下 nohup vs. exec systemd 的 type参数 、killmode
startup.sh 是把canal放到后台启动,然后脚本退出。 systemd是保证追踪的进程是存在的(进程是运行的),type=simple追踪的是启动进程(脚本的pid),脚本退出后,systemd判断为启动失败;forking就是追踪脚本fork出来的进程(canal 的pid),不管启动脚本是否退出。
如果 你尝试用supervisord, 会了解startup.sh 需要用exec +启动命令 。 exec就是用新进程代替当前进程,但是pid不变。
tail -f /dev/null 起的作用就是,后台fork子进程canal,tail -f 是保证当前脚本不退出。systemd的killmode默认是control-group,所以stop时 会停tail -f ,也会停子进程 canal。
可以搜索下 nohup vs. exec systemd 的 type参数 、killmode
明白了,非常感谢写了这么详细的解释。
Question
我尝试了
[Unit] Description=canal server Application After=network.target [Service] Type=simple ExecStart=/root/canaldeploy/bin/startup.sh ExecStop=/root/canaldeploy/bin/stop.sh
User=root Group=root [Install] WantedBy=multi-user.target
问题: 启动后马上stop掉
日志输出如下:
● canal.service - canal server Application Container Loaded: loaded (/etc/systemd/system/canal.service; disabled; vendor preset: disabled) Active: inactive (dead)
May 05 22:00:09 sh1uatfntwebl02 systemd[1]: Starting canal server Application Container... May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: cd to /root/canaldeploy/bin for workaround relative path May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: LOG CONFIGURATION : /root/canaldeploy/bin/../conf/logback.xml May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: canal conf : /root/canaldeploy/bin/../conf/canal.properties May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: CLASSPATH :/root/canaldeploy/bin/../conf:/root/canaldeploy/bin/../lib/zookeeper-3.4.5.jar:/root/canaldepl...pring-jdb May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: fka_2.11-1.1.1.jar:/root/canaldeploy/bin/../lib/jsr305-3.0.2.jar:/root/canaldeploy/bin/../lib/jopt-simple.../canaldep May 05 22:00:09 sh1uatfntwebl02 stop.sh[23468]: sh1uatfntwebl02: stopping canal 23467 ... May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: b/aviator-2.2.1.jar:/root/canaldeploy/bin/../lib/aopalliance-1.0.jar:/root/canaldeploy/bin/../lib/aliware...-1.0.jar: May 05 22:00:09 sh1uatfntwebl02 startup.sh[23457]: cd to / for continue May 05 22:00:09 sh1uatfntwebl02 stop.sh[23468]: Oook! cost:0 Hint: Some lines were ellipsized, use -l to show in full.