1#!/bin/sh 2# $1: Package name/allpkg, $2: action. 3 4 5APPS_PATH=/opt 6APPS_RUN_DIR=$APPS_PATH/etc/init.d 7APPS_MOUNTED_PATH=`nvram get apps_mounted_path` 8APP_FS_TYPE=`mount | grep $APPS_MOUNTED_PATH | sed -e "s,.*on.* type \([^ ]*\) (.*$,\1,"` 9memsize=`grep MemTotal /proc/meminfo | sed -e "s,MemTotal:[^0-9]*\([0-9][0-9]*\) .*,\1,"` 10 11 12if [ -z "$1" ] || [ -z "$2" ]; then 13 echo "Usage: app_init_run.sh <Package name|allpkg> <action>" 14 exit 1 15fi 16 17if [ ! -d "$APPS_RUN_DIR" ]; then 18 echo "The APP's init dir was not existed!" 19 exit 1 20fi 21 22if [ "$2" == "stop" ]; then 23 while true ; do 24 PIDS1=`ps|grep "sh.*/\(\.asusrouter\|app_base_link.sh\|app_update.sh\|app_init_run.sh.*start\)"|grep -v grep|awk '{print $1}'` 25 PIDS2=`ps|grep "sh.*/opt/etc/init\.d/S.*start"|grep -v grep|awk '{print $1}'` 26 PIDS3=`ps|grep "ch\(mod\|own\).*/tmp/mnt"|grep -v grep|awk '{print $1}'` 27 PIDS4=`ps|grep "wget.*asus"|grep -v grep|awk '{print $1}'` 28 PIDS5=`ps|grep "[^[]watch_app"|grep -v grep|awk '{print $1}'` 29 PIDS=`echo $PIDS1 $PIDS2 $PIDS3 $PIDS4 $PIDS5 | tr '\n' ' '` 30 31 if [ -z "`echo $PIDS | tr -d ' \n\t\f\r'`" ] ; then 32 break 33 fi 34 35 kill -TERM $PIDS 36 sleep 1 37 kill -KILL $PIDS 38 done 39fi 40 41for f in $APPS_RUN_DIR/S*; do 42 s="/opt/"`basename $f`.1 43 [ -e "$s" ] && rm -f $s 44 if [ "$APP_FS_TYPE" == "fuseblk" ] ; then 45 sed -e "s,\(chmod.*\),echo skip \1," -e "s,\(chown.*\),echo skip \1," -e "s,/opt/etc/init\.d/\(S50[^. ]*\),/opt/\1.1," $f > $s 46 else 47 cp -f $f $s 48 fi 49done 50 51for f in $APPS_RUN_DIR/S*; do 52 s=$f 53 tmp_apps_name=`get_apps_name $f` 54 if [ "$1" != "allpkg" ] && [ "$1" != "$tmp_apps_name" ]; then 55 continue 56 fi 57 58 if [ "$2" == "start" ] || [ "$2" == "firewall-start" ]; then 59 app_enable=`app_get_field.sh $tmp_apps_name "Enabled" 1` 60 if [ "$app_enable" != "yes" ]; then 61 if [ "$1" != "allpkg" ] && [ "$1" == "$tmp_apps_name" ]; then 62 echo "No permission to start with the app: $1!" 63 exit 1 64 fi 65 66 continue 67 fi 68 fi 69 70 # If all process of a package are not exist, skip the stop procedure. 71 if [ "$2" == "stop" ]; then 72 proc_list="" 73 if [ "$tmp_apps_name" == "downloadmaster" ] ; then 74 proc_list="\(dm2_amuled\|dm2_snarfmaster\|dm2_transmission-daemon\|dm2_nzbget\|dm2_amuled\)" 75 elif [ "$tmp_apps_name" == "mediaserver" ] ; then 76 proc_list="\(watch_app\|minidlna\)" 77 elif [ "$tmp_apps_name" == "asuslighttpd" ] ; then 78 proc_list="\(asus_lighttpd\)" 79 fi 80 81 if [ "$proc_list" != "" ] ; then 82 if [ "`ps|grep -c $proc_list`" == "0" ] ; then 83 echo "Skip stop procedure of $tmp_apps_name package." 84 continue; 85 fi 86 fi 87 fi 88 89 s="/opt/"`basename $f`.1 90 [ ! -e "$s" ] && s=$f 91 92 nice_cmd= 93 if [ $memsize -lt 204800 -a "$tmp_apps_name" == "downloadmaster" ]; then 94 nice_cmd="nice -n 19" 95 fi 96 97 echo "$nice_cmd sh $s $2" | logger -c 98 $nice_cmd sh $s $2 99 100 if [ "$tmp_apps_name" == "mediaserver" ] && [ "$2" == "stop" ] ; then 101 sleep 1 102 ms_pid=`pidof minidlna` 103 i=0 104 while [ ! -z "$ms_pid" ] && [ $i -lt 10 ] ; do 105 i=$((i+1)) 106 echo "$i: $nice_cmd sh $s $2" | logger -c 107 $nice_cmd sh $s $2 108 sleep 1 109 ms_pid=`pidof minidlna` 110 done 111 ms_pid=`pidof minidlna` 112 if [ ! -z "$ms_pid" ] ; then 113 killall -9 minidlna 114 fi 115 fi 116 117 if [ "$1" != "allpkg" ] && [ "$1" == "$tmp_apps_name" ]; then 118 break 119 fi 120done 121 122if [ $memsize -lt 204800 ]; then 123 dm2_trans_array=`ps|grep dm2_trans|grep -v grep|awk '{print $1}'` 124 for tran in $dm2_trans_array; do 125 ionice -c3 -p $tran 126 done 127fi 128 129