Here are a couple of useful one-liners that I picked up from voip-info.org a while back to manipulate a bunch of audio files in a single directory with Sox. You can save yourself some processing power on your Asterisk PBX if all of your hold music is in SLINEAR format that way no transcoding has to take place.
Continue reading “Bash Script – Convert a Batch of WAV Files to SLINEAR Format for Asterisk Hold Music”
Browse Recent:
Bash Script – An Alternative to Logrotate.d for Asterisk Log Files
For the longest time, I was having trouble getting the log rotate daemon to work properly with Asterisk. I tried using both postrotate and prerotate options on Ubuntu Server and no matter what, I always ended up with dozens or even hundreds of files if I wasn’t keeping a close eye on them. I never figured out why or wanted to spend a ton of time searching for answers but for some reason, the numbering on the log files would always get messed up and it would start adding extra periods on the end of the filenames and everything would get all out of whack.
Continue reading “Bash Script – An Alternative to Logrotate.d for Asterisk Log Files”
Bash Script – Pcapsipdump Spool Directory File Rotation – OR – Rotate Directories Based on YYYYMMDD Format
In the config file for the pcapsipdump program, there is a retention option where you are supposed to be able to enter the number of days to keep the directories in your spool folder and it should auto purge out the old directories/files, however, this option either doesn’t appear to be implemented yet or doesn’t work if you run the app as a different user (could be a permissions issue maybe?).
Anyhow, this script is my solution to the problem. It could also very easily be modified and used where someone needs to search and delete directories that are based on YYYYMMDD format with the ability to whitelist or ignore certain directories, hence the alternate title. Yet another alternate title could even be “Bash Script Functions – Convert YYYYMMDD to Unix Time and Vice Versa” but obviously the script would need modified a little because it has been tailored to fit my needs.
When run as a cron job, the script will grab both the spool directory and the retention period from the pcapsipdump config file and will purge out any old folders based on YYYYMMDD format so they aren’t eating up all your valuable disk space.
I also added a couple of noteworthy user-configurable options. The first being a directory whitelist feature (IGNORE_DIRS array), this option can be used in situations where there are directories that you don’t want purged or would like to keep the data indefinitely and that can also be used in conjunction with the PURGE_ALL feature to delete out any subdirectories that aren’t specifically listed in the whitelist if you are a clean freak.
Download it now – pcaprotate.sh
#!/bin/bash # # pcapsipdump file rotation # By Nathan Thomas # 12/05/2014 # ### VARS ### # Location of the pcapsipdump config file CONF_FILE='/etc/default/pcapsipdump'; # Keep the spool folder clean - Delete all folders (except those in the ignored directories array) # yes - Keep the spool folder free from any directories not in the ignore list # no - Don't worry about any other random folders in the spool directory Continue reading "Bash Script – Pcapsipdump Spool Directory File Rotation – OR – Rotate Directories Based on YYYYMMDD Format"
Bash Script – Sync a File to an Array of Hosts
#!/bin/bash # Sync a file to a remote set of servers using scp and check using diff # NOTE: This requires the use of 'sshpass' and IS insecure in nature # It also assumes the user credentials are identical on all hosts # and that they have the necessary permissions on the remote directory # Author: Nathan Thomas LOGFILE='/var/log/sync_files.log' SSH_USER='non-root-user' SSH_PASS='password' CONF_FILE='/etc/appdir/myconfig.conf' SERVERS=('server1.fqdn.com' 'server2.fqdn.com' 'server3.fqdn.com') for HOST in "${SERVERS[@]}" ; do # NOTE: This won't work if the host keys are not already in the ssh cache # Flush ssh hosts - Either uncomment these two lines on first run or you could leave it uncommented for hosts that change addresses a lot Continue reading "Bash Script – Sync a File to an Array of Hosts"
Bash Script – Script Based MySQL Table Replication on an Array of Slaves
This bash script only uses row count and MySQL checksum to determine table consistency. I created this script because I wanted a different option rather than using MySQL replication. I initially had replication set up and working between six sites but it would tend to break from time to time so I needed a different solution. In my situation, my data was only being updated once or twice a week. This script should only be used in cases where you’re not overly concerned about your data consistency and row count and checksum are sufficient enough to suit your needs. If you need a more accurate consistency check of your table data, look into the Percona Toolkit.
#!/bin/bash # # Sync DB Tables w/o Replication # Author: Nathan Thomas 01/16/2014 #------# # VARS # #------# # Server to sync DB from MASTER='master01.fqdn.com' MUSER='username' MPASS='password' DBNAME='mydbname' TBLNAME='mytablename' DUMP='/tmp/mydumpfile.sql' LOGFILE='/var/log/mysql/mysql_repl_check.log' MAILTO='my_email_addr@fqdn.com' # Array of slave hostnames separated by a space declare -a SLAVE=('slave01.fqdn.com' 'slave02.fqdn.com' 'slave03.fqdn.com') # Array of slave usernames in same order declare -a SUSER=('username1' 'username2' 'username3') # Array of slave passwords in same order declare -a SPASS=('password1' 'password2' 'password3') #-----------# # FUNCTIONS # #-----------# # Check table exists # params: $1=username $2=password $3=hostname function tableExists() { echo "`date "+%a %b%e %T"` - Called function 'tableExists' on $3." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Running query to verify table '${TBLNAME}' exists in database '${DBNAME}' on $3." >> ${LOGFILE} local QUERY="SELECT COUNT(1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_NAME='${TBLNAME}'" local RESULT=`mysql -u $1 -p$2 -h $3 -Bse "$QUERY" 2>&1` local RETVAL="$?" echo "`date "+%a %b%e %T"` - Query on $3 retured the following value: '${RESULT}'" >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Exit status of last command on $3 returned: '${RETVAL}'" >> ${LOGFILE} if [ "${RETVAL}" -eq "0" -a "${RESULT}" -eq "0" 2>/dev/null ] ; then # Retval 0, query returned 0, hide stderr, Table missing echo "`date "+%a %b%e %T"` - Table '${TBLNAME}' does not exist in database '${DBNAME}' on $3." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Function 'tableExists' completed successfully on $3." >> ${LOGFILE} return 1 # No dice elif [ "${RETVAL}" -eq "0" -a "${RESULT}" -eq "1" 2>/dev/null ] ; then # Retval 0, query returned 1, hide stderr, Table exists echo "`date "+%a %b%e %T"` - Table '${TBLNAME}' exists in database '${DBNAME}' on $3." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Function 'tableExists' completed successfully on $3." >> ${LOGFILE} return 0 # All good else # Some other error echo "`date "+%a %b%e %T"` - Unable to determine table '${TBLNAME}' exists in database '${DBNAME}' on $3." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - We either encountered an error code in the SQL data, had a problem connecting to MySQL, or the last command exited with a nonzero status." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Function 'tableExists' did not finish successfully on $3." >> ${LOGFILE} return 2 # No dice fi } # Get row count # params: $1=username $2=password $3=hostname function getRowCount() { echo "`date "+%a %b%e %T"` - Called function 'getRowCount' on $3." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Verifying table '${TBLNAME}' exists in database '${DBNAME}' on $3." >> ${LOGFILE} tableExists $1 $2 $3 if [ "$?" -eq "0" ] ; then # Retval 0, table exists echo "`date "+%a %b%e %T"` - Running query to obtain row count on table '${TBLNAME}' in database '${DBNAME}' on $3." >> ${LOGFILE} local QUERY="SELECT COUNT(id) FROM ${TBLNAME}" local RESULT=`mysql -u $1 -p$2 -h $3 ${DBNAME} -Bse "${QUERY}" 2>&1` local RETVAL="$?" echo "`date "+%a %b%e %T"` - Query on $3 retured the following value: '${RESULT}'" >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Exit status of last command on $3 returned: '${RETVAL}'" >> ${LOGFILE} if [ "${RETVAL}" -eq "0" -a -n "${RESULT}" -a "${RESULT}" -eq "${RESULT}" 2>/dev/null ] ; then # Retval 0, check for nonzero string, is numeric, hide stderr echo "${RESULT}" echo "`date "+%a %b%e %T"` - The row count on $3 is: '${RESULT}'" >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Function 'getRowCount' completed successfully on $3." >> ${LOGFILE} return 0 # All good else echo "`date "+%a %b%e %T"` - Unable to retrieve row count on $3." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - We either encountered an error code in the SQL data, had a problem connecting to MySQL, or the last command exited with a nonzero status." >> ${LOGFILE} echo "`date "+%a %b%e %T"` - Function 'tableExists' did not finish successfully on $3." >> ${LOGFILE} return 1 # No dice fi fi } # Get table checksum # params: $1=username $2=password $3=hostname function getTableChecksum() { echo "`date "+%a %b%e %T"` - Called function 'getTableChecksum' on $3." >> ${LOGFILE} Continue reading "Bash Script – Script Based MySQL Table Replication on an Array of Slaves"
Bash Script – Auto-Repair an Array of MySQL Database Servers
I have a few servers at work that regularly get crashed tables so I created this script as a workaround until I have time to find the root cause of the problem. Run it as a cron job at your own interval.
Continue reading “Bash Script – Auto-Repair an Array of MySQL Database Servers”
Bash Script – Split a Variable into an Array with Carriage Return Line Feed as the Delimiter
Once again I ran into a situation where I was working on an extremely outdated server and the read command didn’t have the -a option to send contents into an array, so this is the solution I came up with.
Continue reading “Bash Script – Split a Variable into an Array with Carriage Return Line Feed as the Delimiter”
Bash Script – Move Asterisk Call Files into Spool Directory
After running into permission issues trying to get PHP’s shell_exec command to chown call files as the asterisk user(which only root can do), I decided to make this script.
As a side note, you should be able to get the shell_exec command to work using sudo by adding the www-data user to the sudoer’s file without a password but that wouldn’t work in my particular environment. The server I was working on was extremely outdated and didn’t even have sudo installed.
Add this to /etc/sudoers www-data ALL=NOPASSWD: /path/to/script
The following code runs the script as a daemon. You will need to update rc to start this script at default run levels and also make sure to chmod +x this file to make it executable.
filename: /etc/init.d/mvcallfile
#!/bin/bash # Move asterisk call file daemon startup script # Author: Nathan Thomas PROG=mvcallfile Continue reading "Bash Script – Move Asterisk Call Files into Spool Directory"
Startup Script for OpenMeetings Open-Source Video Conferencing Server
/etc/init.d/openmeetings startup script for Ubuntu Server 12.04.2
OpenMeetings Version 2.0-INCUBATING
A few notes:
– Make sure to change path for RED5_HOME variable
– Make sure to chmod +x the init script
– This assumes openmeetings is running under a user/group with the same name
– This assumes you are using libreoffice (not openoffice) for the whiteboard file import service
#!/bin/bash # # Author: Nathan Thomas # ### BEGIN INIT INFO # Provides: red5 # Required-Start: $local_fs $remote_fs $network $syslog $named $time # Required-Stop: $local_fs $remote_fs $network $syslog $named $time # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: true # Short-Description: Start/stop OpenMeetings java based conferencing webapp ### END INIT INFO PROG=red5 DESC="Red5 flash streaming server" RED5_HOME=/usr/local/openmeetings DAEMON=$RED5_HOME/$PROG.sh PIDFILE=/var/run/$PROG.pid # Plugin Variables #OO_HOME=/usr/lib/openoffice/program OO_HOME=/usr/lib/libreoffice/program Continue reading "Startup Script for OpenMeetings Open-Source Video Conferencing Server"