admin.sh 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #########################################################################
  2. # File APP: admin.sh
  3. # Author: wushuiyong
  4. # mail: wushuiyong@walle-web.io
  5. # Created Time: 2018年11月03日 星期六 06时09分46秒
  6. #########################################################################
  7. # Update Time : 2019-03-05
  8. # Author: alenx <alenx.hai@gmail.com>
  9. # -->> 新增ubuntu初始化,全面支持Ubuntu环境(16.x/18.x)
  10. #########################################################################
  11. #!/usr/bin/env bash
  12. # ubuntu 高版本 sh 指向的是 dash 而非 bash。 dash 无法使用 function 关键字以及 source 等命令。
  13. # 如果检测到 sh 指向的是 dash, 那么将使用 bash 重新执行脚本,然后在参数末尾加上一个 flag, 表示此次运行是修正过的, 避免陷入死循环。
  14. fix_ubuntu_bash="fix-sh-in-ubuntu"
  15. if [ ! -n "`echo $@ | grep $fix_ubuntu_bash$`" ]; then
  16. if [ -n "`ls -l /bin/sh | grep "dash"`" ]; then
  17. bash $0 $@ $fix_ubuntu_bash
  18. exit
  19. fi
  20. fi
  21. APP="waller.py"
  22. function init() {
  23. echo "Initing walle"
  24. echo "----------------"
  25. SystemName
  26. pip install virtualenv
  27. if [ ! -d "venv" ]; then
  28. virtualenv --no-site-packages venv # 注意:安装失败请指定python路径. mac 可能会有用anaconda的python. 请不要mac试用, 麻烦多多
  29. fi
  30. requirement
  31. echo "************************************************"
  32. echo -e "\033[32m init walle success \033[0m"
  33. echo -e "\033[32m welcome to walle 2.0 \033[0m"
  34. }
  35. # 如果有依赖安装失败 可以试下豆瓣源 在pip 结尾加上 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  36. function requirement() {
  37. source ./venv/bin/activate
  38. if ! pip install -r ./requirements/prod.txt
  39. then
  40. echo "install requirements failed"
  41. exit 1
  42. fi
  43. }
  44. function SystemName() {
  45. source /etc/os-release
  46. case $ID in
  47. centos|fedora|rhel)
  48. which pip
  49. if [ $? != "0" ]; then
  50. wget https://bootstrap.pypa.io/3.3/get-pip.py
  51. python get-pip.py
  52. fi
  53. echo "安装/更新可能缺少的依赖: mysql-community-devel gcc gcc-c++ python-devel"
  54. # 安装python-devel报错 yum install yum-utils ,yum clean all yum -y install python-devel
  55. sudo yum install -y yum-utils mariadb-devel mysql-devel --skip-broken gcc gcc-c++ python-devel MySQL-python
  56. ;;
  57. debian|ubuntu|devuan)
  58. echo "安装/更新可能缺少的依赖: libmysqld-dev libmysqlclient-dev python-dev python-virtualenv python-pip"
  59. sudo apt update -y
  60. sudo apt install -y libmysqld-dev libmysqlclient-dev python-dev python-virtualenv python-pip
  61. ;;
  62. raspbian)
  63. echo "安装/更新可能缺少的依赖"
  64. sudo apt update -y
  65. sudo apt install -y gcc g++ python-dev virtualenv python-pip libpq-dev libffi-dev libssl-dev libmariadbd18 libmariadbd-dev
  66. ;;
  67. *)
  68. exit 1
  69. ;;
  70. esac
  71. }
  72. function start() {
  73. echo "Starting walle"
  74. echo "----------------"
  75. source ./venv/bin/activate
  76. mkdir -p logs
  77. nohup python ${APP} >> logs/runtime.log 2>&1 &
  78. echo -e "Start walle: [\033[32m ok \033[0m]"
  79. echo -e "runtime: \033[32m logs/runtime.log \033[0m"
  80. echo -e "error: \033[32m logs/error.log \033[0m"
  81. }
  82. function stop() {
  83. echo "Stoping walle"
  84. echo "----------------"
  85. # 获取进程 PID
  86. PID=$(ps -ef | grep ${APP} | grep -v grep | awk '{print $2}')
  87. # 杀死进程
  88. kill -9 ${PID}
  89. echo -e "Stop walle: [\033[32m ok \033[0m]"
  90. }
  91. function restart() {
  92. stop
  93. echo ""
  94. start
  95. }
  96. function upgrade() {
  97. echo "Upgrading walle"
  98. echo "----------------"
  99. cd $(dirname $0)
  100. echo -e "建议先暂存本地修改\033[33m git stash\033[0m,更新后再弹出\033[33m git stash pop\033[0m,处理冲突。"
  101. source ./venv/bin/activate
  102. git pull
  103. }
  104. function walle_banner() {
  105. echo " ";
  106. echo " llllllllllllll ";
  107. echo " l::::l l::::l ";
  108. echo "wwwwwww wwwww wwwwww aaaaaaaaaaaaa l::::l l::::l eeeeeeeeeeee ";
  109. echo " w:::::w w:::::w w:::::w a::::::::::::a l::::l l::::l ee::::::::::::ee ";
  110. echo " w:::::w w:::::::w w:::::w aaaaaaaaa:::::a l::::l l::::l e::::::eeeee:::::ee";
  111. echo " w:::::w w:::::::::w w:::::w a::::a l::::l l::::l e::::::e e:::::e";
  112. echo " w:::::w w:::::w:::::w w:::::w aaaaaaa:::::a l::::l l::::l e:::::::eeeee::::::e";
  113. echo " w:::::w w:::::w w:::::w w:::::w aa::::::::::::a l::::l l::::l e:::::::::::::::::e ";
  114. echo " w:::::w:::::w w:::::w:::::w a::::aaaa::::::a l::::l l::::l e::::::eeeeeeeeeee ";
  115. echo " w:::::::::w w:::::::::w a::::a a:::::a l::::l l::::l e:::::::e ";
  116. echo " w:::::::w w:::::::w a::::a a:::::a l::::l l::::l e::::::::e ";
  117. echo " w:::::w w:::::w a:::::aaaa::::::a l::::l l::::l e::::::::eeeeeeee ";
  118. echo " w:::w w:::w a::::::::::aa::a l::::: l:::::l ee:::::::::::::e ";
  119. echo " www www aaaaaaaaaa aaaa llllllllllllllll eeeeeeeeeeeeee ";
  120. echo " ";
  121. }
  122. function migration() {
  123. echo "Migration walle"
  124. echo "----------------"
  125. source ./venv/bin/activate
  126. export FLASK_APP=waller.py
  127. flask db upgrade
  128. if [ $? == "0" ]; then
  129. echo -e "Migration: [\033[32m ok \033[0m]"
  130. else
  131. echo -e "Migration: [\033[31m fail \033[0m]"
  132. fi
  133. }
  134. case "$1" in
  135. require)
  136. requirement;;
  137. init )
  138. walle_banner
  139. init
  140. ;;
  141. start )
  142. walle_banner
  143. start
  144. ;;
  145. stop )
  146. walle_banner
  147. stop
  148. ;;
  149. restart )
  150. walle_banner
  151. restart
  152. ;;
  153. upgrade )
  154. walle_banner
  155. upgrade
  156. requirement
  157. migration
  158. echo -e "\033[32m walle 更新成功. \033[0m \033[33m 建议重启服务 sh admin.sh restart\033[0m"
  159. ;;
  160. migration )
  161. walle_banner
  162. migration
  163. ;;
  164. * )
  165. walle_banner
  166. echo "************************************************"
  167. echo "Usage: sh admin {init|require|start|stop|restart|upgrade|migration}"
  168. echo "************************************************"
  169. ;;
  170. esac