Unfortunately no one can be told what fun_plug is - you have to see it for yourself.
You are not logged in.
Since I have Transmission running 24/7 and after a long while of running it uses A LOT of memory I wrote a script to restart it whenever it's using too much memory.
What the script does in detail:
0. If transmission-daemon isn't running - start it.
1. If transmission-daemon is running but uses too much memory - restart it. The amount of memory is configurable, and expressed in percent (50, 90, etc.).
2. The restart procedure is a bit more elaborate than calling /ffp/bin/transmission restart - unlike that, the watchdog script waits till transmission-daemon stops before starting it. The wait period is configurable, and if set too short can time-out. If the time-out occurs, transmission-daemon won't be restarted. But since, typically, you'll run this script periodically, as a cron job, the next time it runs it will restart it.
3. If you configured mutt, you can set the script to send an email to an address of your choice detailing what happened (start/restart/timeout). By default this is turned off. You can change that, and the email in the settings section at the beginning of the script.
4. If you run into problems, change the debug setting from false to true and run from the command-line to get more verbose output to help figure out what's wrong.
5. It's easy to make changes for different ffp installation via the setting section.
Important:I tested those features and using this script on my DNS-323 running Firmware 1.10 and ffp 0.5.
/ffp/bin/transmission-watchdog.sh
#!/bin/sh
############
# Settings #
############
# if Transmission consumes more memory (percent) than this it will be restarted
maxTransmissionMemoryUse=90
# These settings control how long will this script wait for Transmission stop to complete
maxTransmissionStopRetryCount=5
maxTransmissionStopRetryWait=60
# Change this to turn on/off emailing what action the script took.
# make sure you configure mutt/msmtp before turning on this feature.
shouldEmail=false
#shouldEmail=true
# Where the email will be sent to
myEmail="my_email@gmail.com"
# Change this to true for verbose output
debug=false
#debug=true
# Set path to Fun_Plug files.
# Fun_Plug 3.0 or 4.0
# ffpPath=/mnt/HD_a2/fun_plug.d
# Fun_Plug 5.0
ffpPath=/ffp
ffpStartPath=${ffpPath}/start
topCmd="${ffpPath}/bin/top"
grepCmd="${ffpPath}/bin/grep"
echoCmd="${ffpPath}/bin/echo"
awkCmd="${ffpPath}/bin/awk"
sedCmd="${ffpPath}/bin/sed"
sleepCmd="${ffpPath}/bin/sleep"
muttCmd="/usr/bin/mutt"
transmissionStart="${ffpStartPath}/transmission.sh"
#########################
# Transmission-Watchdog #
#########################
grepTransmission=$(${topCmd} -b -n 1 | ${grepCmd} transmission-daemon | ${grepCmd} -v grep)
grepRes=$?
# if transmission is running
if [ ${grepRes} -eq 0 ]; then
${debug} && ${echoCmd} -n "Transmission is running. "
transmissionMemoryUse=$(${echoCmd} $grepTransmission | ${awkCmd} '{print $6;}' | ${sedCmd} 's/%//')
${debug} && ${echoCmd} "It's using ${transmissionMemoryUse}% of system memory. Allowed: ${maxTransmissionMemoryUse}%"
if [ ${transmissionMemoryUse} -gt ${maxTransmissionMemoryUse} ]; then
${debug} && ${echoCmd} -n "Stopping Transmission: "
${transmissionStart} stop
retryCount=${maxTransmissionStopRetryCount}
while [ ${retryCount} -gt 0 ]
do
${topCmd} -b -n 1 | ${grepCmd} transmission-daemon | ${grepCmd} -v grep > /dev/null
if [ $? -ne 0 ]; then
${debug} && ${echoCmd} " Done!"
break;
fi
${debug} && ${echoCmd} -n "."
retryCount=$((${retryCount} - 1))
${sleepCmd} ${maxTransmissionStopRetryWait}
done
if [ ${retryCount} -eq 0 ]; then
timeOut=$((${maxTransmissionStopRetryWait} * ${maxTransmissionStopRetryCount}))
${debug} && ${echoCmd} " Timed-out after ${timeOut} seconds!"
${shouldEmail} && ${echoCmd} -e "Transmission Restarted due to excessive memory usage.\nActual ${transmissionMemoryUse}%, allowed: ${maxTransmissionMemoryUse}%. But Transmission stop took too long to complete (more than ${timeOut} seconds).\nEither something's wrong or you need to increase the timeout period." | ${muttCmd} -n -F /ffp/usr/local/share/mutt/Muttrc -s "Transmission restart failed" ${myEmail}
exit 127
fi
${debug} && ${echoCmd} -n "Starting Transmission: "
${transmissionStart} start
${shouldEmail} && ${echoCmd} -e "Transmission Restarted due to excessive memory usage.\nActual ${transmissionMemoryUse}%, allowed: ${maxTransmissionMemoryUse}%." | ${muttCmd} -n -F /ffp/usr/local/share/mutt/Muttrc -s "Transmission restarted" ${myEmail}
fi
else
${debug} && ${echoCmd} -n "Transmission isn't running. Start it: "
${transmissionStart} start
${shouldEmail} && ${echoCmd} -e "Transmission wasn't running so it was started." | ${muttCmd} -n -F /ffp/usr/local/share/mutt/Muttrc -s "Transmission started" ${myEmail}
fiFor the sake of completeness, here's the script I use to set-up a cron job for running the transmission-watchdog.sh script periodically.
It's sort of a generic script, to start/stop cron jobs. You should place it in /ffp/start and make sure it has execute permissions.
After that, either restart the device or run the command "/ffp/start/editcron_transmission.sh start".
Currently, I set it to run the transmission-watchdog.sh script every two hours.
/ffp/start/editcron_transmission.sh
#!/bin/sh
# PROVIDE: EDITCRON_TRANSMISSION
# REQUIRE: LOGIN
#
# Schedule job
# Important: Always run "/ffp/start/editcron_transmission.sh stop" BEFORE making changes to job.
# Otherwise, the old job will remain scheduled until you restart.
#
schedule="0 */2 * * *"
job="/ffp/bin/transmission-watchdog.sh"
#
# Commands
#
grepcmd="/bin/grep"
crontabcmd="/bin/crontab"
rmcmd="/bin/rm"
echocmd="/bin/echo"
#
# Tempporary files
#
TMPDIR="/tmp"
TMPCRONTXT="${TMPDIR}/crontab.txt"
TMPOTHERCRONTXT="${TMPDIR}/othercrontab.txt"
#
# FFP Start Functions
#
. /ffp/etc/ffp.subr
start_cmd="editcron_start"
stop_cmd="editcron_stop"
status_cmd="editcron_status"
editcron_start()
{
# grab existing crontab
${crontabcmd} -l > ${TMPCRONTXT}
# check if already scheduled
cronjobs=$(${grepcmd} "${job}" ${TMPCRONTXT})
if test -n "${cronjobs}"; then
${echocmd} "${job} already scheduled:"
${echocmd} "${cronjobs}"
else
# add the cron job and install the new one
${echocmd} "Scheduling ${schedule} ${job}"
${echocmd} "${schedule} ${job}" >> ${TMPCRONTXT}
${crontabcmd} ${TMPCRONTXT}
fi
# clean up
${rmcmd} ${TMPCRONTXT}
}
editcron_stop()
{
# grab existing crontab
${crontabcmd} -l > ${TMPCRONTXT}
# check if already scheduled
cronjobs=$(${grepcmd} "${job}" ${TMPCRONTXT})
if test -z "${cronjobs}"; then
${echocmd} "${job} not scheduled"
else
# remove the cron job(s) and install the new one
${grepcmd} -v "${job}" ${TMPCRONTXT} > ${TMPOTHERCRONTXT}
${crontabcmd} ${TMPOTHERCRONTXT}
${echocmd} "${job} not longer scheduled"
# clean up
${rmcmd} ${TMPOTHERCRONTXT}
fi
# clean up
${rmcmd} ${TMPCRONTXT}
}
editcron_status()
{
# grab existing crontab
${crontabcmd} -l > ${TMPCRONTXT}
cronjobs=$(${grepcmd} "${job}" ${TMPCRONTXT})
# check if already scheduled
if test -n "${cronjobs}"; then
${echocmd} "${job} is scheduled:"
${echocmd} "${cronjobs}"
else
${echocmd} "${job} not scheduled"
fi
# clean up
${rmcmd} ${TMPCRONTXT}
}
run_rc_command "$1"Last edited by scaramanga (2012-06-15 13:16:59)
Offline
I posted a how-to configure msmtp/mutt if you're interested in emailing from scripts, such as this one here.
Offline