Pomoc Uruchomienie z systemem skryptu Bash (jdownloader)

spietrza

Download Station
Q's Professional
20 Marzec 2013
428
83
118
48
Poznań
QNAP
TVS-x71
Ethernet
802.11ad
Witam wszystkich,

mam zainstalowanego JDownloader. Poprzez skrypt mogę jd2_downloadr.sh mogę korzystać poprzez interfejs webowy na my.jdownloader.
Jak wyłączę SSH w którym uruchomiony jest skrypt pada połączenie między NAS a my.jdownloader.

Dlatego mam pytanie jak mogę na QNAP NAS uruchomić w tle skrypt aby cały czas się był uruchomiony i w razie restartu także automatycznie się włączał. Szukam takiej funkcjonalności uruchamiania poprzez DSM jak ma S lub dla wtajemniczonych jak to zrobić poprzez SSH bez podtrzymania sesji ??

Z góry dziękuję za odpowiedz.
 
Dlatego mam pytanie jak mogę na QNAP NAS uruchomić w tle skrypt aby cały czas się był uruchomiony i w razie restartu także automatycznie się włączał. Szukam takiej funkcjonalności uruchamiania poprzez DSM jak ma S lub dla wtajemniczonych jak to zrobić poprzez SSH bez podtrzymania sesji ??
Najłatwiej?
How-To - QNAP od środka, czyli grzebiemy w linuchu - Jak sobie ułatwić?

6.1] Wykonaj aby edytować:
Bash:
/opt/bin/mcedit /etc/init.d/Optware.sh
Przed ostatnim poleceniem exit $RETVAL dodaj:
Bash:
sync
sleep 1
_myapp_log="/share/Public/myapp_exec.log"


# ----------------------------- przyklad 1
# app numer 1 - sh exec
_exec="/share/..._DATA/.qpkg/Moja/aplikacja.sh"
# uruchom bez delegowania argumentu start/stop
#[ -x "$_exec" ] && sh "$_exec" | tee -a $_myapp_log
# przekaz argument start/stop, tj.: ./aplikacja.sh start
[ -x "$_exec" ] && sh "$_exec" $@ | tee -a $_myapp_log


# ----------------------------- przyklad 2
# app numer 2 - bash command/exec
_exec="/share/..._DATA/.qpkg/Moja/aplikacja.sh"
[ -x "$_exec" ] && bash -c "$_exec $@" | tee -a $_myapp_log


# ----------------------------- przyklad 3
# app numer 3 - pozostawienie aplikacji w tle za pomoca screen
# install deps: screen ...
type -f screen 2> /dev/null || \
	sh -c "\
		type -f ipkg && 	\
		ipkg update && 		\
		ipkg install screen \
		"
# uruchom aplikacje...
_exec="/share/..._DATA/.qpkg/Moja/aplikacja.sh"
if [ -x "$_exec" ]; then
		if [ "$1" == "start" ]; then
				echo "screen run: $_exec"
				scren -dmS mySessionName "$_exec"
		elif [ "$1" == "stop" ]; then
				echo "screen kill: $_exec"
				killall -9 "`pidof screen`"
				# jesli mamy plik z pidem
				#kill "`cat /tmp/mojapp.pid`"
		else
				echo "huh? hmmm..."
		fi
fi


# ----------------------------- przyklad 4
# app numer 4 - pozostawienie aplikacji w tle za pomoca dtach
# install deps: dtach ...
type -f dtach 2> /dev/null || \
	sh -c "\
		type -f ipkg && 	\
		ipkg update && 		\
		ipkg install dtach 	\
		"
# uruchom aplikacje...
_exec="/share/..._DATA/.qpkg/Moja/aplikacja.sh"
_socket="/tmp/NazwaMojejAplikacji.socket"
if [ -x "$_exec" ]; then
		if [ "$1" == "start" ]; then
				echo "dtach run: $_exec"
				dtach -n "$_socket" "$_exec"
		elif [ "$1" == "stop" ]; then
				echo "dtach kill: $_exec"
				killall -9 "moja_app_name"
				# jesli mamy plik z pidem
				#kill "`cat /tmp/mojapp.pid`"
		else
				echo "huh? hmmm..."
		fi
fi
 
Dzięki @Silas Mariusz to działa.
Jednak mam problem jeden w skrypcie dotyczącym jd2 jest temat ustawienia użytkownika i hasła dostępu dla my.jdownloader

Jak uruchamiam ręcznie zawsze wpisuję dane a jesli zadziała automat staje wtedy na próbie wpisania danych. Czy jest szansa na albo dodanie przy uruchamianiu parametru tak aby dane w pewnym miejscu ( nie wiem jeszcze gdzie w skrypcie ) uzupełniły się z automatu ??

Dodatkowo zapytaniem dla pewności. Z Twojej instrukcji jest rozkaz start i stop to znaczy że jeśli uruchomię nazwa_skryptu -start to wystartuję jak -stop to wystopuję, zgadza się ??

Bash:
#!/bin/bash

JAVA_HOME_TEST=$(/bin/cat /etc/profile | awk '/JAVA_HOME=/ { print $2 }' | tail -c +11)

# Determine BASE installation location according to smb.conf
BASE=
publicdir=`/sbin/getcfg Public path -f /etc/config/smb.conf`
if [ ! -z $publicdir ] && [ -d $publicdir ];then
  publicdirp1=`/bin/echo $publicdir | /bin/cut -d "/" -f 2`
  publicdirp2=`/bin/echo $publicdir | /bin/cut -d "/" -f 3`
  publicdirp3=`/bin/echo $publicdir | /bin/cut -d "/" -f 4`
  if [ ! -z $publicdirp1 ] && [ ! -z $publicdirp2 ] && [ ! -z $publicdirp3 ]; then
    [ -d "/${publicdirp1}/${publicdirp2}/Public" ] && BASE="/${publicdirp1}/${publicdirp2}"
  fi
fi

# Determine BASE installation location by checking where the Public folder is.
if [ -z $BASE ]; then
  for datadirtest in /share/HDA_DATA /share/HDB_DATA /share/HDC_DATA /share/HDD_DATA /share/MD0_DATA; do
    [ -d $datadirtest/Public ] && BASE="$datadirtest"
  done
fi
if [ -z $BASE ] ; then
  /bin/echo "The Public share not found."
  exit
fi

CheckForOpt(){ #Does /opt exist? if not check if it's optware that's installed or opkg, and start the package
  /bin/echo -n "Checking for /opt..."
  if [ ! -d /opt/bin ]; then
    if [ -x /etc/init.d/Optware.sh ]; then #if optware ,start optware
      /bin/echo "Starting Optware..."
      /etc/init.d/Optware.sh start
      /bin/sleep 2
    elif [ -x /etc/init.d/opkg.sh ]; then #if opkg, start opkg
      /bin/echo "Starting Opkg..."  
      /etc/init.d/opkg.sh start
      /bin/sleep 2
    else #catch all
      /bin/echo "No Optware or Opkg found, please install one of them"  
      /sbin/write_log "Failed to start $QPKG_NAME, no Optware or Opkg found. Please re-install one of those packages" 1
      exit
    fi
  else
    /bin/echo "   Found!"
    /bin/sleep 2
  fi
  }

pid_check() {
  # Check if process is already running
  PROCESS_PID=0
  for pid in $(/bin/pidof java); do
    # Try to find if the process is JDownloader
    /bin/grep -q "JDownloader" /proc/$pid/cmdline
    if [ $? -eq 0 ]; then
    # Process found, save PID and exit loop
    PROCESS_PID=$pid
    break
    fi
  done
  # Print result
  /bin/echo "Pid of process = $PROCESS_PID"
  }

Shutdown_jd2() { #kills a proces based on a PID in a given PID file
  pid_check
  if [[ $PROCESS_PID -eq 0 ]]; then
    /bin/echo "java is not running?"
  else
    /bin/echo "Shutting down jd2... "
    i=0
    /bin/kill $PROCESS_PID
    /bin/echo -n "   Waiting for jd2 to shut down: "
    while [ -d /proc/$PROCESS_PID ]; do
      /bin/sleep 1
      let i+=1
      /bin/echo -n "$i, "
      if [ $i = 45 ]; then
        /bin/echo "   Tired of waiting, killing jd2 now"
        /bin/kill -9 $PROCESS_PID
        exit 1
      fi
    done
    /bin/echo "Done"
  fi
  }

jd2_check() {
  if [ -z "$JAVA_HOME_TEST" ]; then
    /bin/echo "Java PATH not found. Please install JRE QPKG from http://goo.gl/ayMIbE."
    /bin/echo "NOTE: If you have just installed Java, close and reopen your session to update (putty)."
    exit 1
  else
    export JAVA_HOME=$JAVA_HOME_TEST
  fi

  # Store JAVA binary path
  JAVA_BIN=${JAVA_HOME_TEST}/bin/java

  # Check if Java runs correctly
  if ! $JAVA_BIN -version 2>&1 | /bin/grep -q "Java(TM)"; then
    /bin/echo "Java does not run correctly. Please test the Java environment and try again."
    exit 2
  fi
  }

countdown() {
  local OLD_IFS="${IFS}"
  IFS=":"
  local ARR=( $1 ) ; shift
  IFS="${OLD_IFS}"
  local PREFIX="$*" ; [ -n "${PREFIX}" ] && PREFIX="${PREFIX} > "
  local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
  local START=$(date +%s)
  local END=$((START + SECONDS))
  local CUR=$START
  while [[ $CUR -lt $END ]]
  do
          CUR=$(date +%s)
          LEFT=$((END-CUR))

          printf "\r${PREFIX}%02d:%02d:%02d" \
                  $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

          /bin/sleep 1
  done
  printf "\nOk,riprendo con l'installazione\n"
  }

jar_download() {
  if /usr/bin/wget http://installer.jdownloader.org/JDownloader.jar -O $publicdir/jd2/JDownloader.jar 1>/dev/null 2>&1 ; then
    /bin/echo "jd2 jar scaricato correttamente"
    /bin/sleep 2
  else
    /bin/echo "Errore"
    /bin/echo "Oops, Non sono riuscito a scaricare il file jar, potrebbe esserci un problema di rete, oppure altro."
    exit
  fi
  }

qpkg_download() {
  if /usr/bin/wget --no-check-certificate https://dl.dropboxusercontent.com/u/2668178/JDownloader2.qpkg -O $publicdir/JDownloader2.qpkg 1>/dev/null 2>&1 ; then
    /bin/echo "jd2 qpkg scaricato correttamente"
    /bin/sleep 2
  else
    /bin/echo "Errore"
    /bin/echo "Oops, Non sono riuscito a scaricare il file qpkg, potrebbe esserci un problema di rete, oppure altro."
    exit
  fi
  }

if [[ -d $publicdir/jd2 ]]; then
    /bin/rm -r $publicdir/jd2
fi

if [[ -f $publicdir/JDownloader2.qpkg ]]; then
  /bin/rm $publicdir/JDownloader2.qpkg
fi

umask 000
/bin/mkdir -p $publicdir/jd2
Shutdown_jd2
CheckForOpt
jd2_check
jar_download
cd $publicdir/jd2 && $JAVA_BIN -Djava.awt.headless=true -jar $publicdir/jd2/JDownloader.jar
countdown "00:05:00" "Attendi ancora"
Shutdown_jd2
cd $publicdir/jd2 && $JAVA_BIN -Djava.awt.headless=true -jar $publicdir/jd2/JDownloader.jar
qpkg_download
/bin/echo "Fatto, ora devi solo installare il qpkg e poi configurare per bene JD2 dall'interfaccia web!"
 
Dodatkowo zapytaniem dla pewności. Z Twojej instrukcji jest rozkaz start i stop to znaczy że jeśli uruchomię nazwa_skryptu -start to wystartuję jak -stop to wystopuję, zgadza się ??
Tak
Utwórz plik:
Bash:
cd /share/Public
touch args.sh && chmod +x args.sh

# zainstaluj hakierskie edytory plikow:
ipkg updatge
ipkg install nano emacs22 joe jove ne uemacs vim

# ... sam ich nie uzywam, ale to pewnie dlatego ze jestem lamer, bo hipsterka linuxem ala no-life mnie nie kręci
# zatem zamiast naciskac ESC, następnie ':' a pozniej 'w' aby zapisac plik w VI, naciskam F2 w mcedit
# dlatego zainstaluj:
ipkg install mc

# Edytuj plik:
mcedit args.sh

Jeśli używasz PuTTY, przytrzymaj shift i kliknij prawym przyciskiem myszy w edytorze mcedit aby wkleić ze schowka poniższą zawartość.
Bash:
#!/bin/bash
##
##   bash for dummies
##
##   Copyright © 2013, Silas Mariusz <silas@qnap.com.antispam>
##                     QNAP Club Polska
##
##   This program is free software; you can redistribute it and/or modify
##   it under the terms of the GNU General Public License as published by
##   the Free Software Foundation; either version 2, or (at your option)
##   any later version.
##
##   This program is distributed in the hope that it will be useful,
##   but WITHOUT ANY WARRANTY; without even the implied warranty of
##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##   GNU General Public License for more details.
##
##   You should have received a copy of the GNU General Public License
##   along with this program; if not, write to the Free Software Foundation,
##   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
##
##   The latest version of this software can be obtained here:
##
##   https://forum.qnap.net.pl/
##
##
##   FILE: args.sh
##
##   RELEASE: 1.0
##   DATE: 2014-05-13
##

# Normal Colors         Bold Colors          # Color
# -------------------------------------------#--------
black='\e[0;30m'        bblack='\e[1;30m'    # Black
red='\e[0;31m'          bred='\e[1;31m'      # Red
green='\e[0;32m'        bgreen='\e[1;32m'    # Green
yellow='\e[0;33m'       byellow='\e[1;33m'   # Yellow
blue='\e[0;34m'         bblue='\e[1;34m'     # Blue
purple='\e[0;35m'       bpurple='\e[1;35m'   # Purple
cyan='\e[0;36m'         bcyan='\e[1;36m'     # Cyan
white='\e[0;37m'        bwhite='\e[1;37m'    # White

# Background
on_black='\e[40m'       # Black
on_red='\e[41m'         # Red
on_green='\e[42m'       # Green
on_yellow='\e[43m'      # Yellow
on_blue='\e[44m'        # Blue
on_purple='\e[45m'      # Purple
on_cyan='\e[46m'        # Cyan
on_white='\e[47m'       # White

# Reset
nc="\e[m"               # Color Reset

# Colors Presets
alert=${bwhite}${on_red} # Bold White on red background


# helpers
#
# process command with DEBUG enabled
function DEBUG()
{
( set -v && set -x ; $@ )
}

# switch DEBUG on/off globally
_DEBUG_MODE=$_DEBUG_MODE
function _DEBUG()
{
_DEBUG_MODE=0 	 ; set +x && set +v
[ "$1" == "on" ] && _DEBUG_MODE=1
[ "$_DEBUG_MODE" = "1" ] && set -v
}


# exercise examples
#
# args
echo -en "\n\n${bred} line: $LINENO: ${alert} args ${nc}" ; 		 echo '$@'
echo -e "\n${bred} line: $LINENO: ${byellow}Result${bwhite}"
echo -e "${bred} line: $LINENO: ${bblue}\$@${nc} = $@"

# arg1
echo -en "\n\n${bred} line: $LINENO: ${alert} arg1 ${nc}" ; 		 echo '$1'
echo -e "\n${bred} line: $LINENO: ${byellow}Result${bwhite}"
echo -e "${bred} line: $LINENO: ${bblue}\$1${nc} = $1"

# arg2
echo -en "\n\n${bred} line: $LINENO: ${alert} arg2 ${nc}" ; 		 echo '$2'
echo -e "\n${bred} line: $LINENO: ${byellow}Result${bwhite}"
echo -e "${bred} line: $LINENO: ${bblue}\$2${nc} = $2"

# wanna more?
echo -e "\n\narg3..n"

# extras
#
# argument no. 0
echo -en "\n\n${bcyan} Now take a look on arg0...\n${bred} line: $LINENO: ${alert} arg0 ${nc}" ; 		 echo '$0'
echo -e "\n${bred} line: $LINENO: ${byellow}Result${bwhite}"
echo -e "${bred} line: $LINENO: ${bblue}\$0${nc} = $0"
echo -e "${nc}"
echo -e "\n ..variable \$0 returns my file name, BUT ONLY when i'm not a part or sourced from an parrent script like this:  "
echo -e "\n      $  ${bwhite}source `basename $0`                                                                    ${nc}  "
echo -e "\n   or this..                                                                                                     "
echo -e "\n      $  ${bwhite}. `basename $0`                                                                         ${nc}  "
echo -e "\n   but when i belong to other script, i'll always return it's name instead mine in response of \$0 variable      "

echo -e "\n\n${yellow}Extras${bwhite}"
echo -e "${bred} line: $LINENO: ${nc} what my name is? `basename $0`                      "
echo -e "${bred} line: $LINENO: ${nc} and where am i?  `dirname $0`                       "
echo -e "${bred} line: $LINENO: ${nc} so where the hell is this?  `cd $(dirname $0) ; pwd`"

echo -e "${nc}"



# show interpreter work
[ "$_DEBUG_MODE" = "1" ] || ( 	 \
echo "would you like to see now how it was processed? (wait ...)" 			 ; 	 \
x=30 											 ; 	 \
while [ "$x" -gt 0 ]; do 									 \
sleep 1 										 ; 	 \
x=$(expr $x - 1) 									 ; 	 \
echo -n " $x" 										 ; 	 \
done 											 ; 	 \
echo -e "\n -\n -\n -\n Now lets run once again with verbose  enabled... \n" 		 ; 	 \
_DEBUG on 										 ; 	 \
source `basename $0` 									 ; 	 \
_DEBUG off 										 ; 	 \
echo -e "\n -\n -\n -\n Okay enough... bye! \n" 					 ; 	 \
)


echo Bye bye!

Uruchom:
Bash:
./args.sh start --quiet --force --more --demo --args

I zobacz jak działają argumenty i zmienne w bashu...
upload_2015-4-23_20-52-42.png

PS. Jak już wygrasz z jdownloaderem, to może wrzuć jakieś screeny a może i jakiś tutek napisz? :)
 

Załączniki

  • args.sh
    4,6 KB · Wyświetleń: 42
  • Wow
Reakcje: spietrza