|
|
} | } |
| |
is_running() { | is_running() { |
if [[ -z "$(pidof asterisk)" ]]; then |
if [ -z "$(pidof asterisk)" ]; then |
return 1 | return 1 |
else | else |
PID="$(cat /var/run/asterisk/asterisk.pid)" | PID="$(cat /var/run/asterisk/asterisk.pid)" |
for x in $(pidof asterisk); do | for x in $(pidof asterisk); do |
if [[ "${x}" = "${PID}" ]]; then |
if [ "${x}" = "${PID}" ]; then |
return 0 | return 0 |
fi | fi |
done | done |
|
|
# mangle yes/no options | # mangle yes/no options |
ASTERISK_CONSOLE="$(echo ${ASTERISK_CONSOLE} | tr [:lower:] [:upper:])" | ASTERISK_CONSOLE="$(echo ${ASTERISK_CONSOLE} | tr [:lower:] [:upper:])" |
| |
if [[ -n "${ASTERISK_CORE_SIZE}" ]] && |
if [ -n "${ASTERISK_CORE_SIZE}" ] && |
[[ "${ASTERISK_CORE_SIZE}" != "0" ]]; then |
[ "${ASTERISK_CORE_SIZE}" != "0" ]; then |
ulimit -c ${ASTERISK_CORE_SIZE} | ulimit -c ${ASTERISK_CORE_SIZE} |
| |
if [[ -n "${ASTERISK_CORE_DIR}" ]] && \ |
if [ -n "${ASTERISK_CORE_DIR}" ] && \ |
[[ ! -d "${ASTERISK_CORE_DIR}" ]] |
[ ! -d "${ASTERISK_CORE_DIR}" ] |
then | then |
mkdir -m750 -p "${ASTERISK_CORE_DIR}" | mkdir -m750 -p "${ASTERISK_CORE_DIR}" |
| |
if [[ -n "${ASTERISK_USER}" ]]; then |
if [ -n "${ASTERISK_USER}" ]; then |
chown -R "${ASTERISK_USER}" "${ASTERISK_CORE_DIR}" | chown -R "${ASTERISK_USER}" "${ASTERISK_CORE_DIR}" |
fi | fi |
fi | fi |
|
|
echo " Core dump location : ${ASTERISK_CORE_DIR}" | echo " Core dump location : ${ASTERISK_CORE_DIR}" |
fi | fi |
| |
if [[ -n "${ASTERISK_MAX_FD}" ]]; then |
if [ -n "${ASTERISK_MAX_FD}" ]; then |
ulimit -n ${ASTERISK_MAX_FD} | ulimit -n ${ASTERISK_MAX_FD} |
echo " Max open filedescriptors : ${ASTERISK_MAX_FD}" | echo " Max open filedescriptors : ${ASTERISK_MAX_FD}" |
fi | fi |
| |
if [[ -n "${ASTERISK_NICE}" ]]; then |
if [ -n "${ASTERISK_NICE}" ]; then |
echo " Nice level : ${ASTERISK_NICE}" | echo " Nice level : ${ASTERISK_NICE}" |
NICE="/bin/nice -n ${ASTERISK_NICE} --" | NICE="/bin/nice -n ${ASTERISK_NICE} --" |
fi | fi |
| |
if [[ -n "${ASTERISK_NOTIFY_EMAIL}" ]]; then |
if [ -n "${ASTERISK_NOTIFY_EMAIL}" ]; then |
if [[ -x /usr/sbin/sendmail ]]; then |
if [ -x /usr/sbin/sendmail ]; then |
echo " Email notifications go to : ${ASTERISK_NOTIFY_EMAIL}" | echo " Email notifications go to : ${ASTERISK_NOTIFY_EMAIL}" |
else | else |
echo " Notifications disabled, /usr/sbin/sendmail doesn't exist or is not executable!" | echo " Notifications disabled, /usr/sbin/sendmail doesn't exist or is not executable!" |
|
|
fi | fi |
fi | fi |
| |
if [[ -n "${ASTERISK_TTY}" ]]; then |
if [ -n "${ASTERISK_TTY}" ]; then |
for x in ${ASTERISK_TTY} \ | for x in ${ASTERISK_TTY} \ |
/dev/tty${ASTERISK_TTY} \ | /dev/tty${ASTERISK_TTY} \ |
/dev/vc/${ASTERISK_TTY} | /dev/vc/${ASTERISK_TTY} |
do | do |
if [[ -c "${x}" ]]; then |
if [ -c "${x}" ]; then |
TTY="${x}" | TTY="${x}" |
fi | fi |
done | done |
[[ -n "${TTY}" ]] && \ |
[ -n "${TTY}" ] && \ |
echo " Messages are sent to : ${TTY}" | echo " Messages are sent to : ${TTY}" |
fi | fi |
| |
if [[ "${ASTERISK_CONSOLE}" = "YES" ]] && [[ -n "${TTY}" ]]; then |
if [ "${ASTERISK_CONSOLE}" = "YES" ] && [ -n "${TTY}" ]; then |
echo " Starting Asterisk console : ${ASTERISK_CONSOLE}" | echo " Starting Asterisk console : ${ASTERISK_CONSOLE}" |
OPTS="${OPTS} -c" | OPTS="${OPTS} -c" |
fi | fi |
|
|
| |
while :; do | while :; do |
| |
if [[ -n "${TTY}" ]]; then |
if [ -n "${TTY}" ]; then |
/usr/bin/stty -F ${TTY} sane | /usr/bin/stty -F ${TTY} sane |
${NICE} /usr/sbin/asterisk ${OPTS} >${TTY} 2>&1 <${TTY} | ${NICE} /usr/sbin/asterisk ${OPTS} >${TTY} 2>&1 <${TTY} |
result=$? | result=$? |
|
|
result=$? | result=$? |
fi | fi |
| |
if [[ $result -eq 0 ]]; then |
if [ $result -eq 0 ]; then |
echo "Asterisk terminated normally" | echo "Asterisk terminated normally" |
break | break |
else | else |
if [[ $result -gt 128 ]]; then |
if [ $result -gt 128 ]; then |
signal=$((result - 128)) | signal=$((result - 128)) |
MSG="Asterisk terminated with Signal: $signal" | MSG="Asterisk terminated with Signal: $signal" |
| |
CORE_TARGET="core-$(date "+%Y%m%d-%h%M%s")" | CORE_TARGET="core-$(date "+%Y%m%d-%h%M%s")" |
| |
local CORE_DUMPED=0 | local CORE_DUMPED=0 |
if [[ -f "${ASTERISK_CORE_DIR}/core" ]]; then |
if [ -f "${ASTERISK_CORE_DIR}/core" ]; then |
mv "${ASTERISK_CORE_DIR}/core" \ | mv "${ASTERISK_CORE_DIR}/core" \ |
"${ASTERISK_CORE_DIR}/${CORE_TARGET}" | "${ASTERISK_CORE_DIR}/${CORE_TARGET}" |
CORE_DUMPED=1 | CORE_DUMPED=1 |
| |
elif [[ -f "${ASTERISK_CORE_DIR}/core.${PID}" ]]; then |
elif [ -f "${ASTERISK_CORE_DIR}/core.${PID}" ]; then |
mv "${ASTERISK_CORE_DIR}/core.${PID}" \ | mv "${ASTERISK_CORE_DIR}/core.${PID}" \ |
"${ASTERISK_CORE_DIR}/${CORE_TARGET}" | "${ASTERISK_CORE_DIR}/${CORE_TARGET}" |
CORE_DUMPED=1 | CORE_DUMPED=1 |
| |
fi | fi |
| |
[[ $CORE_DUMPED -eq 1 ]] && \ |
[ $CORE_DUMPED -eq 1 ] && \ |
MSG="${MSG}\n\rCore dumped: ${ASTERISK_CORE_DIR}/${CORE_TARGET}" | MSG="${MSG}\n\rCore dumped: ${ASTERISK_CORE_DIR}/${CORE_TARGET}" |
else | else |
MSG="Asterisk terminated with return code: $result" | MSG="Asterisk terminated with return code: $result" |
|
|
done | done |
fi | fi |
| |
[[ -n "${TTY}" ]] \ |
[ -n "${TTY}" ] \ |
&& echo "${MSG}" >${TTY} \ | && echo "${MSG}" >${TTY} \ |
|| echo "${MSG}" | || echo "${MSG}" |
| |
| |
if [[ -n "${ASTERISK_NOTIFY_EMAIL}" ]] && \ |
if [ -n "${ASTERISK_NOTIFY_EMAIL}" ] && \ |
[[ -x /usr/sbin/sendmail ]]; then |
[ -x /usr/sbin/sendmail ]; then |
echo -e -n "Subject: Asterisk crashed\n\r${MSG}\n\r" |\ | echo -e -n "Subject: Asterisk crashed\n\r${MSG}\n\r" |\ |
/usr/sbin/sendmail "${ASTERISK_NOTIFY_EMAIL}" | /usr/sbin/sendmail "${ASTERISK_NOTIFY_EMAIL}" |
fi | fi |
|
|
local OPTS USER GROUP PID | local OPTS USER GROUP PID |
local tmp x | local tmp x |
| |
if [[ -n "${ASTERISK_NICE}" ]]; then |
if [ -n "${ASTERISK_NICE}" ]; then |
if [[ ${ASTERISK_NICE} -ge -20 ]] && \ |
if [ ${ASTERISK_NICE} -ge -20 ] && \ |
[[ ${ASTERISK_NICE} -le 19 ]]; then |
[ ${ASTERISK_NICE} -le 19 ]; then |
OPTS="--nicelevel ${ASTERISK_NICE}" | OPTS="--nicelevel ${ASTERISK_NICE}" |
else | else |
eerror "Nice value must be between -20 and 19" | eerror "Nice value must be between -20 and 19" |
|
|
fi | fi |
fi | fi |
| |
if [[ -n "${ASTERISK_USER}" ]]; then |
if [ -n "${ASTERISK_USER}" ]; then |
USER=${ASTERISK_USER/:*/} |
USER=$(echo $ASTERISK_USER | sed 's/:.*//') |
GROUP=$(echo $ASTERISK_USER | awk -F: '/.*:.*/ { print $2 }') | GROUP=$(echo $ASTERISK_USER | awk -F: '/.*:.*/ { print $2 }') |
if [[ -n "${USER}" ]]; then |
if [ -n "${USER}" ]; then |
ASTERISK_OPTS="${ASTERISK_OPTS} -U ${USER}" | ASTERISK_OPTS="${ASTERISK_OPTS} -U ${USER}" |
fi | fi |
if [[ -n "${GROUP}" ]]; then |
if [ -n "${GROUP}" ]; then |
ASTERISK_OPTS="${ASTERISK_OPTS} -G ${GROUP}" | ASTERISK_OPTS="${ASTERISK_OPTS} -G ${GROUP}" |
GROUP=":${GROUP}" # make it look nice... | GROUP=":${GROUP}" # make it look nice... |
fi | fi |
|
|
ebegin "Starting asterisk PBX (as root)" | ebegin "Starting asterisk PBX (as root)" |
fi | fi |
| |
if [[ "$(echo ${ASTERISK_WRAPPER} | tr [:upper:] [:lower:])" != "yes" ]]; then |
if [ "$(echo ${ASTERISK_WRAPPER} | tr [:upper:] [:lower:])" != "yes" ]; then |
start-stop-daemon --start --exec /usr/sbin/asterisk \ | start-stop-daemon --start --exec /usr/sbin/asterisk \ |
${OPTS} -- ${ASTERISK_OPTS} | ${OPTS} -- ${ASTERISK_OPTS} |
|
result=$? |
else | else |
asterisk_run_loop ${ASTERISK_OPTS} 2>/dev/null & | asterisk_run_loop ${ASTERISK_OPTS} 2>/dev/null & |
|
result=$? |
fi | fi |
| |
if [[ $result -eq 0 ]]; then |
if [ $result -eq 0 ]; then |
# 2 seconds should be enough for asterisk to start | # 2 seconds should be enough for asterisk to start |
sleep 2 |
sleep 2 |
|
is_running |
result=$(is_running) |
result=$? |
fi | fi |
| |
eend $result | eend $result |