apache_custom.conf - Reverse proxy usług/programów pod serwer Web http://qnap/aplikacja
apache.conf - zawierający na samym dole include do pliku apache_custom.conf
Poniżej zawarte pomocnicze skrypty w celu zautomatyzowaniu procesu podmiany pliku oraz wykonaniu testów poprawności składni pliku apache.conf.
test-apache-conf.sh:
grep-varexpansion.sh:
Przykładowy autorunmaster.sh wyzwolony przez autorun.sh podmieniający config apache, ssh i Optware:
Qhttpd-test.sh:
autoruntest.sh:
Więcej przykładowych kodów: d4nirod/QNAP-scripts · GitHub
Kod:
######### HTTP REVERSE PROXY
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
# LoadModule proxy_connect_module modules/mod_proxy_connect.so
# LoadModule headers_module modules/mod_headers.so
# LoadModule deflate_module modules/mod_deflate.so
# LoadFile /usr/lib/libxml2.so
# LoadModule xml2enc_module modules/mod_xml2enc.so
# LoadModule rewrite_module modules/mod_rewrite.so
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
<VirtualHost _default_:80>
# DocumentRoot "${SRVROOT}/htdocs"
# ServerName java-guru.serveblog.net
# ServerAlias java-guru.no-ip.biz
# ServerAlias java-guru.serveuser.com
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost Off
RewriteEngine on
<Proxy *>
# AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /transmission http://localhost:9091/transmission
ProxyPass /transmission/web http://localhost:9091/transmission/web
ProxyPassReverse /transmission http://localhost:9091/transmission
ProxyPassReverse /transmission/web http://localhost:9091/transmission/web
ProxyPass /wfm http://localhost:8080/cgi-bin/fm.html
ProxyPassReverse /wfm http://localhost:8080/cgi-bin/fm.html
ProxyPass /qdown http://diogenes:8080/cgi-bin/Qdownload/qdownloadindex.cgi
ProxyPassReverse /qdown http://diogenes:8080/cgi-bin/Qdownload/qdownloadindex.cgi
ProxyPass /cgi-bin http://localhost:8080/cgi-bin
ProxyPassReverse /cgi-bin http://localhost:8080/cgi-bin
ProxyPass /apps http://localhost:8080/cgi-bin/apps
ProxyPassReverse /apps http://localhost:8080/cgi-bin/apss
ProxyPass /libs http://localhost:8080/libs
ProxyPassReverse /libs http://localhost:8080/libs
ProxyPass /css http://localhost:8080/cgi-bin/css
ProxyPassReverse /css http://localhost:8080/cgi-bin/css
ProxyPass /langs http://localhost:8080/cgi-bin/langs
ProxyPassReverse /langs http://localhost:8080/cgi-bin/langs
ProxyPass /qdown http://localhost:8080/cgi-bin/Qdownload
ProxyPassReverse /qdown http://localhost:8080/cgi-bin/Qdownload
ProxyPass /qts http://localhost:8080
ProxyPassReverse /qts http://localhost:8080
ProxyPass /siab http://127.0.0.1:4200/cnx_user
ProxyPassReverse /siab http://127.0.0.1:4200/cnx_user
RewriteLog "/share/HDA_DATA/apache/rewrite_https.log"
RewriteLogLevel 3
RewriteRule ^/(user-settings\.json.*)$ http://localhost:8080/cgi-bin/$1 [P]
RewriteRule ^/(userConfig\.cgi.*)$ http://localhost:8080/cgi-bin/$1 [P]
# RewriteRule ^(libs/.*)$ http://localhost:8080/$1 [P]
RewriteRule ^/(libs/ds.*\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/ext.+\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/Notification\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/RowEditor\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/rpc\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(res/css/.+\.css.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(lang/[A-Za-z]{3}\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(ds.*\.cgi.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
</VirtualHost>
##### SSL REVERSE PROXY
LoadModule ssl_module modules/mod_ssl.so
SSLRandomSeed startup file:/dev/urandom 512
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
#SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLMutex "file:/usr/local/apache/logs/ssl_mutex"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
SSLRequire %{SSL_CIPHER} !~ m/^(EXP|NULL)/
</Directory>
<VirtualHost _default_:443>
DocumentRoot "/share/Qweb"
ErrorLog /dev/null
TransferLog /dev/null
SSLEngine on
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!SSLv2:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
#SSLCertificateFile "/etc/stunnel/stunnel.pem"
SSLCertificateFile "/share/HDA_DATA/apache/my-server.crt"
SSLCertificateKeyFile "/share/HDA_DATA/apache/my-server.key"
#SSLCertificateChainFile "/etc/config/apache/server-ca.crt"
#SSLCACertificatePath "/etc/config/apache/ssl.crt"
SSLCACertificateFile "/share/HDA_DATA/apache/my-rootCA.crt"
#SSLCARevocationPath "/etc/config/apache/ssl.crl"
#SSLCARevocationFile "/etc/config/apache/ssl.crl/ca-bundle.crl"
SSLVerifyClient require
SSLVerifyDepth 1
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost Off
RewriteEngine on
<Proxy *>
# AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
ProxyPass /transmission http://localhost:9091/transmission
ProxyPass /transmission/web http://localhost:9091/transmission/web
ProxyPassReverse /transmission http://localhost:9091/transmission
ProxyPassReverse /transmission/web http://localhost:9091/transmission/web
ProxyPass /wfm http://localhost:8080/cgi-bin/fm.html
ProxyPassReverse /wfm http://localhost:8080/cgi-bin/fm.html
ProxyPass /qdown http://diogenes:8080/cgi-bin/Qdownload/qdownloadindex.cgi
ProxyPassReverse /qdown http://diogenes:8080/cgi-bin/Qdownload/qdownloadindex.cgi
ProxyPass /cgi-bin http://localhost:8080/cgi-bin
ProxyPassReverse /cgi-bin http://localhost:8080/cgi-bin
ProxyPass /apps http://localhost:8080/cgi-bin/apps
ProxyPassReverse /apps http://localhost:8080/cgi-bin/apss
ProxyPass /libs http://localhost:8080/libs
ProxyPassReverse /libs http://localhost:8080/libs
ProxyPass /css http://localhost:8080/cgi-bin/css
ProxyPassReverse /css http://localhost:8080/cgi-bin/css
ProxyPass /langs http://localhost:8080/cgi-bin/langs
ProxyPassReverse /langs http://localhost:8080/cgi-bin/langs
ProxyPass /qdown http://localhost:8080/cgi-bin/Qdownload
ProxyPassReverse /qdown http://localhost:8080/cgi-bin/Qdownload
ProxyPass /qts http://localhost:8080
ProxyPassReverse /qts http://localhost:8080
ProxyPass /siab http://127.0.0.1:4200/cnx_user
ProxyPassReverse /siab http://127.0.0.1:4200/cnx_user
RewriteLog "/share/HDA_DATA/apache/rewrite_https.log"
RewriteLogLevel 3
RewriteRule ^/(user-settings\.json.*)$ http://localhost:8080/cgi-bin/$1 [P]
RewriteRule ^/(userConfig\.cgi.*)$ http://localhost:8080/cgi-bin/$1 [P]
# RewriteRule ^(libs/.*)$ http://localhost:8080/$1 [P]
RewriteRule ^/(libs/ds.*\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/ext.+\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/Notification\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/RowEditor\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(libs/rpc\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(res/css/.+\.css.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(lang/[A-Za-z]{3}\.js.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
RewriteRule ^/(ds.+\.cgi.*)$ http://localhost:8080/cgi-bin/Qdownload/$1 [P]
</VirtualHost>
apache.conf - zawierający na samym dole include do pliku apache_custom.conf
Bash:
#ServerType standalone
ServerRoot "/usr/local/apache"
LockFile /var/lock/apache.lock
PidFile /var/lock/apache.pid
#ScoreBoardFile /usr/local/apache/logs/apache.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxClients 50
MaxRequestsPerChild 30
LoadModule php5_module modules/libphp5.so
Listen 80
User httpdusr
Group administrators
ServerAdmin admin@NAS
#ServerName NAS
TraceEnable off
ServerTokens Prod
DocumentRoot "/share/Qweb"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/share/Qweb">
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.htm index.php
</IfModule>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
UseCanonicalName Off
HostnameLookups Off
<Directory "/usr/local/apache/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
DefaultType text/plain
ErrorLog /dev/null
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel crit
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
</IfModule>
ServerSignature On
#
# Aliases: Add here as many aliases as you need (with no limit). The format is
# Alias fakename realname
#
<IfModule alias_module>
Alias /v3_menu/ "/home/httpd/v3_menu/"
<Directory "/home/httpd/v3_menu">
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</IfModule>
<IfModule autoindex_module>
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
</IfModule>
#
# Document types.
#
<IfModule mime_module>
TypesConfig /etc/config/apache/mime.types
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage he .he
AddCharset ISO-8859-8 .iso8859-8
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage kr .kr
AddCharset ISO-2022-KR .iso-kr
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cs .cz .cs
AddLanguage ru .ru
AddLanguage zh-TW .zh-tw
AddCharset Big5 .Big5 .big5
AddCharset WINDOWS-1251 .cp-1251
AddCharset CP866 .cp866
AddCharset ISO-8859-5 .iso-ru
AddCharset KOI8-R .koi8-r
AddCharset UCS-2 .ucs2
AddCharset UCS-4 .ucs4
AddCharset UTF-8 .utf8
<IfModule negotiation_module>
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
</IfModule>
AddType application/x-tar .tgz
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .php4 .php3 .phtml
AddType application/x-httpd-php-source .phps
AddHandler cgi-script .cgi
AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler send-as-is asis
AddHandler imap-file map
AddHandler type-map var
</IfModule>
<IfModule mime_magic_module>
MIMEMagicFile /etc/config/apache/magic
</IfModule>
<IfModule setenvif_module>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
DeflateCompressionLevel 2
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilter DEFLATE js css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.[0678] no-gzip
BrowserMatch \bMSIE\s7 !no-gzip !gzip-only-text/html
</IfModule>
Include /etc/config/apache/extra/apache-msv2.conf
Include /etc/config/apache/extra/apache-musicstation.conf
Include /etc/config/apache/extra/apache-photo.conf
Include /etc/config/apache/extra/apache-video.conf
Include /share/HDA_DATA/apache/apache-custom.conf
Include /etc/config/apache/extra/httpd-ajaxplorer.conf
Poniżej zawarte pomocnicze skrypty w celu zautomatyzowaniu procesu podmiany pliku oraz wykonaniu testów poprawności składni pliku apache.conf.
test-apache-conf.sh:
Bash:
#!/bin/sh
/usr/local/apache/bin/apache -t -f /etc/config/apache/apache.conf
grep-varexpansion.sh:
Bash:
#!/bin/sh
apache_conf=/etc/config/apache/apache.conf
apache_custom_conf=/share/HDA_DATA/apache/apache-custom.conf
/bin/grep "apache-custom" $apache_conf
echo "1: $?"
/bin/grep "$apache_custom_conf" $apache_conf
echo "2: $?"
/bin/grep ""$apache_custom_conf"" $apache_conf
echo "3: $?"
Przykładowy autorunmaster.sh wyzwolony przez autorun.sh podmieniający config apache, ssh i Optware:
Bash:
#!/bin/sh
# con /opt/bin/bash parece que no se lanza en boot
# con /bin/sh no funciona el redireccionamiento a funcion/process substitution
# this is called by autorun.sh
# /share/HDA_DATA/.qpkg/autorun/autorunmaster.sh
log=/share/HDA_DATA/.qpkg/autorun/autorunmaster.log
log(){
/bin/echo "$(/bin/date '+%F %T.%3N') $1" >> $log
}
log "***** Starting autorunmaster.sh *****"
apache_conf=/etc/config/apache/apache.conf
apache_custom_conf=/share/HDA_DATA/apache/apache-custom.conf
exec >> $log 2>&1
# adding IPKG apps into system path ...
# Dani 12/11/2011 ESTO SE HACE EN /opt/Optware.sh
#/bin/cat /etc/profile | /bin/grep "PATH" | /bin/grep "/opt/bin" 1>>/dev/null 2>>/dev/null
# Bug fix for following: put IPKG first, per https://forum.qnap.com/viewtopic.php?f=124&t=15663
# was [ $? -ne 0 ] && /bin/echo "export PATH=$PATH":/opt/bin:/opt/sbin >> /etc/profile
#[ $? -ne 0 ] && /bin/echo "export PATH=/opt/bin:/opt/sbin:\$PATH" >> /etc/profile
log "PATH=$PATH"
#Dani 12/11/2011 modificado segun https://forum.qnap.com/viewtopic.php?f=85&t=18977
#FIRST start Optware and delete the /etc/rcS.d/QS100...sh
log "Starting Optware"
/etc/init.d/Optware.sh start
/bin/rm -f /etc/rcS.d/QS100Optware
log "Optware started"
log "Setting up custom scripts"
# Fin Dani 12/11/2011
#modificar configuracion apache. quiet grep search
/bin/grep -q $apache_custom_conf $apache_conf
if [ $? -eq 0 ]
then
log "$apache_conf already includes $apache_custom_conf. Nothing to be done."
else
log "$apache_conf does NOT include $apache_custom_conf. Including now."
/bin/echo "Include $apache_custom_conf" >> $apache_conf
log "Restarting apache"
/etc/init.d/Qthttpd.sh restart
fi
log "Copying /usr/local/etc/services to /etc/services"
/bin/cp -f /usr/local/etc/services /etc/services
/bin/sleep 2
export OPTWARE_TARGET=cs08q1armel
log "Starting xinetd..."
if [ -e "/opt/sbin/xinetd" ]
then
/sbin/daemon_mgr xinetd start "/opt/sbin/xinetd"
log "xinetd started"
# sleep 5
else
log "xinetd not accessible"
fi
log "***** End of autorunmaster.sh *****"
/bin/sync
/bin/sleep 1
Qhttpd-test.sh:
Bash:
#!/bin/sh
APACHE_CONF="/etc/config/apache/apache.conf"
is_conf_broken()
{
conf_size_min=4096
conf_size=`/usr/bin/du -b "${APACHE_CONF}" | /bin/awk '{print $1}'`
[ ! -z $conf_size -a $conf_size -le $conf_size_min ] && return 1
if [ -x /usr/local/apache/bin/apache ]; then
/usr/local/apache/bin/apache -t -f "${APACHE_CONF}" 1>/dev/null 2>/dev/null
[ $? = 0 ] || return 1
fi
miss=0
/bin/grep "^ServerRoot" "${APACHE_CONF}" >/dev/null
[ $? = 0 ] || miss=$(($miss+1))
/bin/grep "^Listen" "${APACHE_CONF}" >/dev/null
[ $? = 0 ] || miss=$(($miss+1))
/bin/grep "^DocumentRoot" "${APACHE_CONF}" >/dev/null
[ $? = 0 ] || miss=$(($miss+1))
/bin/grep "/home/httpd/v3_menu" "${APACHE_CONF}" >/dev/null
[ $? = 0 ] || miss=$(($miss+1))
[ $miss -eq 0 ] || return 1
return 0
}
is_conf_broken
if [ $? = 0 ]
then
echo "Config ok"
else
echo "Config broken"
fi
autoruntest.sh:
Bash:
#!/bin/sh
# con /opt/bin/bash parece que no se lanza en boot
# con /bin/sh no funciona el redireccionamiento a funcion/process substitution
log=/home/telemarch/autorun/autoruntest.log
stdlog=/home/telemarch/autorun/autoruntest_std.log
log(){
echo "[1] $(date '+%F %T.%3N') $1" >> $log
# otra forma
# d=$(date +'%Y-%m-%d %H:%M:%S|%N')
# ms=$(( ${d#*|}/1000000 ))
# d="${d%|*}.$ms"
# echo "[2] $d $1" >> $log
# otra más esta con printf
# timestamp = $(date '+%F %T.%N')
# printf '%04d-%02d-%02dT%02d:%02d:%02d.%03d $1' \
# $(date -r "${timestamp%.*}" +"%Y %m %d %H %M %S")\
# $(( ${timestamp#*.}/1000 )) >> $log
printf "[4] %.23s" $(date +'%Y-%m-%dT%H:%M:%S.%N') >> $log
echo "" >> $log
}
log "*** Starting autoruntes.sh"
#namedpipe=/home/telemarch/autorun/autoruntest_sh_pipe
#alias ts='/home/telemarch/sbin/ts'
#if [ -p $namedpipe ]; then
# echo "Named pipe $namedpipe exists. Deleting."
# rm -f "$namedpipe"
#fi
## create named pipe
#mkfifo $namedpipe
## Start ts writing to a logfile, but pulling its input from our named pipe.
#ts "%F %H:%M:%.S" >> "$log" < "$namedpipe" &
## capture ts's process ID for the wait command.
#ts_pid=$!
## redirect the rest of the stderr and stdout to our named pipe.
#exec > $namedpipe 2>&1
exec > $stdlog 2>&1
#echo "*** Starting autoruntest.sh"
log "PATH=$PATH"
#log "PID of ts: $ts_pid"
#echo "Calling another script subscript.sh"
#/home/telemarch/autorun/subscript.sh &
# echo "subscript.sh done."
log "Running command with stdout output"
ls -la
log "Running wrong command with stderr output"
gfrxls
#echo "Closing output redirection to log file"
## close the stderr and stdout file descriptors.
#exec 1>&- 2>&-
#
## Wait for ts to finish since now that other end of the pipe has closed.
#wait $ts_pid
##delete named pipe when finished
#trap 'rm "$namedpipe"' EXIT
log "*** End of autoruntest.sh"
Więcej przykładowych kodów: d4nirod/QNAP-scripts · GitHub