This is a simple way to get Shoutcast restarted (tested in Ubuntu 8.04) if the inbound stream is lost. You need Lynx installed for this to work, there might be better ways of achieving the same result though. To install Lynx:
$ sudo apt-get install lynx
Put in file shoutcast_supervisor.sh in /usr/bin:
#!/bin/bash
ONLINE=$(lynx -dump localhost:8000 | grep "Stream is up" | wc -l)
if [ "$ONLINE" -eq "0" ]
then
logger -i Inbound connection not found. Restarting Shoutcast.
/etc/init.d/shoutcast restart
fi
Change ownership, group and execution:
$ sudo chown root /usr/bin/shoutcast_supervisor.sh
$ sudo chgrp root /usr/bin/shoutcast_supervisor.sh
$ sudo chmod +x /usr/bin/shoutcast_supervisor.sh
Add the script to cron.d your preferred way, I do it in /etc/cron.d in a file name shoutcast_supervisor:
0 * * * * root /usr/bin/shoutcast_supervisor.sh
15 * * * * root /usr/bin/shoutcast_supervisor.sh
30 * * * * root /usr/bin/shoutcast_supervisor.sh
45 * * * * root /usr/bin/shoutcast_supervisor.sh
Restart cron:
$ sudo /etc/init.d/cron restart
…and the script is run every 15 minutes and will restart the Shoutcast daemon if the inbound connection was lost. Change the interval if you need to check more often. Sometimes this solves connection problems. Check the syslog for any message that the daemon was restarted, like:
$ tail /var/log/syslog
Another “wee” tip. I had a hard time doing this right…
Put emacs in the EDITOR shell variable:
$ EDITOR=emacs
$ export EDITOR
and add the following to your ~/.emacs:
(set 'temporary-file-directory "/tmp")
Now, edit the crontab file via:
$ crontab -e
Edit and save the file, and you should get a response from crontab:
crontab: installing new crontab
If you get an error message, something is wrong. You can check that your edits really changed your crontab using:
$ crontab -l
The Autocompleter.Local in the Script.aculo.us Prototype-addon is quite nice. It can be used to get type-ahead into a field if you have a local JavaScript Array. I wanted to extend the functionality to have it behave as a Combobox, which is like a Select with a text input field. Here is how I did it, be advised it has some bugs, let me know if you have a better solution!
var Combobox={};
Combobox.Local=Class.create(Autocompleter.Local,{
initialize:function($super,element,update,array,options){
$super(element,update,array,options);
this.options.minChars=this.options.minChars||0;
Event.observe(this.element,'click',this.onClick.bindAsEventListener(this));
},
onClick:function($super,event){
if(Event.element(event).id){
if(this.active){
this.hasFocus=false;
this.active=false;
this.hide();
}else{
this.activate();
this.render();
}
return;
}
$super(event);
}
});
The CSS I use is a modified variant of the Autocompleter.Local wiki page:
.combo {
background-image:url(combo_select2.gif);
background-repeat:no-repeat;
background-position:right top;
margin-right:10px;
}
.combo:hover {
background-image:url(combo_select2.gif);
background-repeat:no-repeat;
background-position:right -18px;
}
div#autocomplete {
margin:0px;
padding:0px;
width:250px;
background:#fff;
border:1px solid #888;
position:absolute;
}
div#autocomplete ul {
margin:0px;
padding:0px;
list-style-type:none;
}
div#autocomplete ul li.selected {
background-color:#ffb;
}
div#autocomplete ul li {
margin:0;
padding:2px;
height:12px;
display:block;
list-style-type:none;
cursor:pointer;
}
Usage:
new Combobox.Local('textFieldID','outputDivID',array,options);
Example JavaScript:
var cities=new Array('Stockholm','Göteborg','Kiruna');
new Combobox.Local(
'cityField',
'autocomplete',
cities,
{
partialSearch:true,
fullSearch:true,
partialChars:0,
minChars:0
}
);
Example HTML:
The Windows XP style combobox image referenced in the CSS can be found here:
