[Plugin] CA User Scripts


Recommended Posts

Still having some issues with this plugin regarding background tasks, however this issue is a bit more important and without a mitigation on my own versus my previous problem:

On 6/14/2021 at 2:54 AM, TheOgre said:

Recently started using the plug-in and am running into an issue where, if the script is started in the background, aborting the script does not kill the process.

 

It's a simple RAM monitoring script with an if statement if that makes any difference.

 

 

The issue I am having now is that a script I am running in the background, that monitors system ram usage and restarts a docker container to prevent the system from completely running out of ram, seems to ONLY work when I log into the webui.

 

Let me preface this by saying, I know restarting a container due to a ram issue is usually not an acceptable fix but in this situation, Zoneminder is having major memory leak issues on versions past 1.34 and even the developer is trying to fix it but has yet to come to a conclusion on how to, thus this is a temporary fix as it only needs restarting once in a while.

 

The script in question:

#!/bin/bash
threshold=250          # Minimum amount of memory left when you should start killing, in MB
browser="firefox-bin"  # Change this to whatever you use, firefox is actually firefox-bin
echo "Monitoring RAM usage and restarting Zoneminder docker when remaining RAM falls below 250mb"
while true; do
    available=$(free -m | head -2 | tail -1 | awk '{print $7}')
    if [ "$threshold" -ge "$available" ]; then
        docker restart Zoneminder
        echo "RAM usage exceeded, restarting Zoneminder docker....one moment"
    fi
    sleep 20
done

 

 

The oddest thing about this, was this exact script was working for a few weeks, and suddenly does not work unless the server has an active GUI connection to it open. For instance, the server will creep up in memory until it reaches the 250mb left mark, then the script restarts the container, but this doesn't happen anymore until after I log into the unraid webui. I try to access any service/docker running on the machine, and it fails due to the server being out of ram, but when I load into the webui, system CPU and RAM usage is pegged at 100% but after a few short moments, the script kicks in and restarts the process.

 

I don't see any reason for this behavior and why it started not working randomly (guess that's most IT problems lol) but I have tried everything from recreating the script, restarting the server, and even increasing the RAM threshold within the script to no avail.

 

Any help would be greatly appreciated!

Link to comment
  • 4 weeks later...

The unassigned devices plugin has a very nice option to run a script when external drive is plugged in.

Use the default script button to start with a default script and build from there, I have something similar build but not with encryption.

Edited by soana
Link to comment
2 minutes ago, soana said:

The unassigned devices plugin has a very nice option to run a script when external drive is plugged in.

Use the default script button to start with a default script and build from there, I have something similar build but not with encryption.

I have tried multiple times to get the UD scripts to work but could never figure it out, it doesn't make sense. I wish it could be connected to user scripts so I can just select a user script to run.

Link to comment

Here is my script I did not put too much time into it since it did the job from the first time.

Line 4 and 5 define the source and the destination. The backup (rsync) and notification bits are in the ACTION block

 

#!/bin/bash
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin

source="/mnt/user/Personal/"
destination="/mnt/disks/My_Book_3Tb/"

## Available variables: 
# AVAIL      : available space
# USED       : used space
# SIZE       : partition size
# SERIAL     : disk serial number
# ACTION     : if mounting, ADD; if unmounting, UNMOUNT; if unmounted, REMOVE; if error, ERROR_MOUNT, ERROR_UNMOUNT
# MOUNTPOINT : where the partition is mounted
# FSTYPE     : partition filesystem
# LABEL      : partition label
# DEVICE     : partition device, e.g /dev/sda1
# OWNER      : "udev" if executed by UDEV, otherwise "user"
# PROG_NAME  : program name of this script
# LOGFILE    : log file for this script

case $ACTION in
  'ADD' )
    # do your stuff here
    /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "Unassigned Devices" -d "Device mounted" -i "normal"
    date >/var/log/My_Book_3Tb_Backup.log
    /usr/bin/rsync -avrtH --delete $source $destination >>/var/log/My_Book_3Tb_Backup.log
    /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "My_Book_3Tb" -d "Backup to My_Book_3Tb finished see /var/log/My_Book_3Tb_Backup.log for details" -i "normal"

    # This will refresh the UD webpage when the script is finished.
    /usr/local/sbin/rc.unassigned refresh $DEVICE
  ;;

  'UNMOUNT' )
    # do your stuff here
    /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "Unassigned Devices" -d "Device unmounting" -i "normal"
  ;;

  'REMOVE' )
    # do your stuff here
    /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "Unassigned Devices" -d "Device unmounted" -i "normal"
  ;;

  'ERROR_MOUNT' )
    # do your stuff here
    /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "Unassigned Devices" -d "Error mounting device" -i "alert"
  ;;

  'ERROR_UNMOUNT' )
    # do your stuff here
    /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "Unassigned Devices" -d "Error unmounting device" -i "alert"
  ;;
esac

 

Link to comment
  • 2 weeks later...
On 6/26/2016 at 1:23 AM, Squid said:

#description=this is the description of the script

#foregroundOnly=true

#backgroundOnly=true

#arrayStarted=true

#name=blah blah blah

#clearLog=true

#argumentDescription=This is the description of the argument(s)

#argumentDefault=defaultArg1 defaultArg2 etc

#noParity=true

First of, I love this plugin. Second, would it be possible to allow variables for Node scripts too, i.e. parsing `//` right after the shebang, in addition to `#`? Like:

#!/usr/bin/env node
//name=Script name

I know I can just run the JS file from the shell script but I prefer to have it self-contained.

Link to comment

Does anyone have a script that will check the docker logs for a specific error and restart a container if the error is present?

 

In my case, Plex corrupts EasyMediaEncoder every now and then which will not allow any media to play. The only way I have managed to fix it is to go in and manually delete the folder and restart the container. I did create a script that does this for me but I have to manually fire it. 

 

I am hoping there is a way that I can monitor the logs every 5 minutes or so to search for (or any portion of)

Jobs: Exec of /config/Library/Application Support/Plex Media Server/Codecs/EasyAudioEncoder-1452-linux-x86_64/EasyAudioEncoder/EasyAudioEncoder failed. (13)

and then fire the script to automatically delete the folder and restart Plex.

 

If anyone has a script similar to this or has any info to point me in the right direction, it would be much appreciated.

 

 

--------------------------

EDIT: Got it figured out:

if docker logs --since 1m PlexMediaServer 2>&1 | grep -i "EasyAudioEncoder failed"; then
  echo "EMC Failed"
  echo "Stopping Plex container..."
  docker stop PlexMediaServer

  echo "Deleting Codecs folder..."
  rm -r "mnt/user/docker/Plex-Media-Server/config/Library/Application Support/Plex Media Server/Codecs"

  echo "Starting Plex again..."
  docker start PlexMediaServer

  echo "Sending notification to UNRAID"
  /usr/local/emhttp/webGui/scripts/notify -e "EasyMediaEncoder failed!" -s "Plex Media Server" -d "EasyAudioEncoder failed. Check to see if it has been fixed." -i "alert"

  echo "Fixed!"
fi

It basically checks the last minute in the docker logs for plex and searches "EasyAudioEncoder failed". If it does, it stops Plex, deletes the EMC folder, and then restarts Plex. 

Edited by LTM
Link to comment

A small feature request: whitespace in the output of a script is currently being collapsed, causing this (the columns are supposed to be aligned):

 

screenshot-unraiden.local-2021_08.22-19_14_15.thumb.png.a2021efbe2528c571e2e44202f501166.png

 

If the output were to be wrapped in a <pre> tag, it will preserve the whitespace and show correctly, like this:

screenshot-unraiden.local-2021_08.22-19_16_01.thumb.png.260f8bdddd658bc3901eabcc390d7a92.png

 

It would also have the added benefit of adding some top margin to the output, for better separation :)

 

(the font-family of the <pre> tag might need to be set to 'bitstream' to not get overridden with 'monospace')

Link to comment

Hello everyone,

I have been having an issue for the past months whereby i can't edit save or delete anything, clicking the save button doesn't submit anything and when I refresh the page nothing has changed. How would I reset the app so I can start fresh? I tried uninstalling the app and reinstalling but the settings ect are still there.

Link to comment

Hi there, good morning. Thanks for the awesome plugin!

I set my own script to run as a cronjob this morning but it didn't execute. I had it set to run custom and cron time 30 2 * * TUE

(2:30AM on every Tuesday). Not sure why it did not execute this morning. Was my cron format wrong? Can you please advise?

 

Thanks in advance.

Link to comment
13 hours ago, lamp said:

Hi there, good morning. Thanks for the awesome plugin!

I set my own script to run as a cronjob this morning but it didn't execute. I had it set to run custom and cron time 30 2 * * TUE

(2:30AM on every Tuesday). Not sure why it did not execute this morning. Was my cron format wrong? Can you please advise?

 

Thanks in advance.

 

If I have questions about the cron schedule, I rely on this......     https://crontab.guru/

 

Truly a god send.....

 

Link to comment

Is it possible to add an optional feature, to send the output of the script (the same as what is shown if you Run the Task in the Web UI) as a Notification using the unRAID Notification system, so we can see when scripts have run, and if any issues etc were reported? Similar to how in Cron you can set it to email you on completion (assuming you have the right stuff setup).

Link to comment
On 8/29/2021 at 5:27 PM, timethrow said:

Is it possible to add an optional feature, to send the output of the script (the same as what is shown if you Run the Task in the Web UI) as a Notification using the unRAID Notification system, so we can see when scripts have run, and if any issues etc were reported? Similar to how in Cron you can set it to email you on completion (assuming you have the right stuff setup).

You can use '/usr/local/emhttp/webGui/scripts/notify' in your script:

notify [-e "event"] [-s "subject"] [-d "description"] [-i "normal|warning|alert"] [-m "message"] [-x] [-t] [-b] [add]
  create a notification
  use -e to specify the event
  use -s to specify a subject
  use -d to specify a short description
  use -i to specify the severity
  use -m to specify a message (long description)
  use -l to specify a link (clicking the notification will take you to that location)
  use -x to create a single notification ticket
  use -r to specify recipients and not use default
  use -t to force send email only (for testing)
  use -b to NOT send a browser notification
  all options are optional

notify init
  Initialize the notification subsystem.

notify smtp-init
  Initialize sendmail configuration (ssmtp in our case).

notify get
  Output a json-encoded list of all the unread notifications.

notify archive file
  Move file from 'unread' state to 'archive' state.

 

  • Like 1
Link to comment
20 hours ago, KnifeFed said:

You can use '/usr/local/emhttp/webGui/scripts/notify' in your script:

notify [-e "event"] [-s "subject"] [-d "description"] [-i "normal|warning|alert"] [-m "message"] [-x] [-t] [-b] [add]
  create a notification
  use -e to specify the event
  use -s to specify a subject
  use -d to specify a short description
  use -i to specify the severity
  use -m to specify a message (long description)
  use -l to specify a link (clicking the notification will take you to that location)
  use -x to create a single notification ticket
  use -r to specify recipients and not use default
  use -t to force send email only (for testing)
  use -b to NOT send a browser notification
  all options are optional

notify init
  Initialize the notification subsystem.

notify smtp-init
  Initialize sendmail configuration (ssmtp in our case).

notify get
  Output a json-encoded list of all the unread notifications.

notify archive file
  Move file from 'unread' state to 'archive' state.

 

 

Thanks, but this only works if you put that in for every eventuality in your script, whereas having the plugin send it after a script has completed (whether successful or not) ensures its always sent.

 

For example, if my script encounters an error that was not captured, the notify may not be sent if included in the script manually, whereas this way, it will always be sent, so long as the underlying plugin works.

 

I do have the notify in some of my user scripts, and I also do redirect alot of my output to log files I store on the array (in case I need it) but this is more for being notified for when a script is run and the output, similar to the cron service on a vanilla Linux server. It allows you to check quickly/easily if a script ran and if it has the expected output or not.

Link to comment
25 minutes ago, IMTheNachoMan said:

How can I either email the output of scripts or have my scripts send an email?

I have an rsync backup script that I run through User Scripts that sends an email summary of the backup process.  Here are the relevant portions of the script I use:

 

	# Set up email header
	echo To: [email protected] >> /boot/logs/cronlogs/BackupNAS_Summary.log
	echo From: [email protected] >> /boot/logs/cronlogs/BackupNAS_Summary.log
	echo Subject: MediaNAS to BackupNAS rsync summary >> /boot/logs/cronlogs/BackupNAS_Summary.log
	echo   >> /boot/logs/cronlogs/BackupNAS_Summary.log

 

# Send email of summary of results
	ssmtp [email protected] < /boot/logs/cronlogs/allshares.log
	cd /boot/logs/cronlogs  
	mv BackupNAS.zip "$(date +%Y%m%d_%H%M)_BackupNAS.zip"
	rm *.log

 

The script concatenates share backup info in allshares.log and then that is emailed to a yahoo.com address

Edited by Hoopster
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.