# cd /etc/systemd/system/ # touch some.service # mcedit some.service [Unit] Description=Some site service [Service] ExecStartPre= ExecStart=/sbin/runuser -l asuser -c '/some/script/start.sh' Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all [Install] WantedBy=multi-user.target # sudo systemctl enable some
Показ дописів із міткою bash. Показати всі дописи
Показ дописів із міткою bash. Показати всі дописи
автозапуск сервіс в Ubuntu 18
gre tunnel bash function
#!/bin/bash
/sbin/modprobe gre
function tun2-up {
NAME=$1
REMOTE=$2
IP=$3
PPTP=$4
#ip link set ${NAME} down
#ip tunnel del ${NAME}
ip tunnel add ${NAME} mode gre remote ${REMOTE} local MY_EXTERNAL_IP
ifconfig ${NAME} inet ${IP} pointopoint ${PPTP}
ip link set ${NAME} up
}
tun2-up tunnelname REMOTE_IP 10.77.253.222/30 10.77.253.221
Архівування лістингу директорії. Кожна директорія окремим файлом
for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
postfix: вибірка з maillog по e-mail
postfix має своєрідний формат логів і вибирати потрібну інформацію потрібно в два проходи. Ось команда, яка робить гарну вибірку по потрібному е-мейлу.
grep 'to=<email@domain.com' /var/log/mail.log | cut -d ' ' -f 6 | grep -f - /var/log/mail.log > email@domain.com.txt
Пакетне переіменування розширення файлів в bash
ls *.mp4* | xargs -I {} sh -c 'mv ${1} ${1%.*}.mp4' - {}
Архівуємо кожну директорію окремим файлом
find * -maxdepth 0 -type d -exec tar zcvf {}.tgz {} \;
find * -maxdepth 0 -type d -exec tar cvf {}.tar {} \;
Конвертація mysql таблиць і полів
mysql --database=dbname -B -N -e "SHOW TABLES" \
| awk '{print "ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"}' \
| mysql --database=dbname
zoneminder: images to avi converter
#!/bin/bash
MYSQL_HOST="localhost"
MYSQL_USER="user"
MYSQL_DB="zm"
MYSQL_PASS="pass"
CACHE_DIR="/var/cache/zoneminder/events"
VIDEO_DIR="video-archive"
cameras=(
5 # kafedra
1 # krapka1
2 # krapka2
6 # krapka2in
3 # krapka3
4 # stoyanka
)
for i in ${cameras[@]}; do
echo
echo "Monitor $i"
echo
if [ ! -d $CACHE_DIR/$i/$VIDEO_DIR ]; then
mkdir $CACHE_DIR/$i/$VIDEO_DIR
fi
IFS=$'\t\n'
#MYSQL_RESULT=(`mysql --skip-column-names -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "SELECT StartTime, EndTime FROM Events WHERE MonitorId='$i' AND EndTime IS NOT NULL"`)
MYSQL_RESULT=(`mysql --skip-column-names -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "SELECT StartTime FROM Events WHERE MonitorId='$i' AND EndTime IS NOT NULL"`)
IFS=$' \t\n'
for (( j=0 ; j<${#MYSQL_RESULT[*]}; j++ )) ; do
echo "${MYSQL_RESULT[j][1]}"
PARSED_DATE=(`echo ${MYSQL_RESULT[j]} | sed -e 's/[:-]/ /g'`)
YEAR=${PARSED_DATE[0]:2:3}
MONTH=${PARSED_DATE[1]}
DAY=${PARSED_DATE[2]}
HOUR=${PARSED_DATE[3]}
MINUTE=${PARSED_DATE[4]}
SECOND=${PARSED_DATE[5]}
#echo ${PARSED_DATE[*]}
if [ -d $CACHE_DIR/$i/$YEAR/$MONTH/$DAY/$HOUR/$MINUTE/$SECOND ]; then
ffmpeg -f image2 -framerate 5 -r 5 -i $CACHE_DIR/$i/$YEAR/$MONTH/$DAY/$HOUR/$MINUTE/$SECOND/%03d-capture.jpg -s 640x480 $CACHE_DIR/$i/$VIDEO_DIR/${YEAR}.${MONTH}.${DAY}-${HOUR}.${MINUTE}.${SECOND}.avi
rm -rf $CACHE_DIR/$i/$YEAR/$MONTH/$DAY/$HOUR/$MINUTE/$SECOND
fi
done
done
mcedit і mc кольори
Стандартна убунтівська кольорова схема для mcedit просто виїдає мозок. Є кусок роботи, де потрібно правити код в mcedit таки. Вставляємо наступний сніпєтц в .bashrc
автоматизація підключення WebDAV-шари
Є багато машин, на кожну потрібно підключити відповідну webdav-шару. Формат http://davhost/pc_0xx і 192.168.0.xx клієнт, відповідно.
#!/bin/bash
IP=`ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'`
IP_ARRAY=(${IP//./ })
FSTAB=/etc/fstab
USER_HOME=/home/user
CLIENT_DIR=$USER_HOME/client
DAVFS_DIR=.davfs2
CLIENT_SECRET=secrets
if [ ! -d $CLIENT_DIR ]; then
echo "create $CLIENT_DIR"
mkdir $CLIENT_DIR
chown user:user $CLIENT_DIR
else
echo "exist $CLIENT_DIR"
fi
if [ ! -d $USER_HOME/$DAVFS_DIR ]; then
echo "create $USER_HOME/$DAVFS_DIR"
mkdir $USER_HOME/$DAVFS_DIR
chown user:user $USER_HOME/$DAVFS_DIR
else
echo "exist $USER_HOME/$DAVFS_DIR"
fi
if [ ! -f $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET ]; then
echo "create $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET"
touch $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
chown user:user $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
chmod 0600 $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
echo "http://davhost/pc_0${IP_ARRAY[3]} user user" >> $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET
else
echo "exist $USER_HOME/$DAVFS_DIR/$CLIENT_SECRET"
fi
if grep "http://davhost/pc_0${IP_ARRAY[3]}" $FSTAB
then
echo "exist mount access in $FSTAB"
else
echo "create mount access in $FSTAB"
echo "http://davhost/pc_0${IP_ARRAY[3]} /home/user/client davfs user,rw,auto,_netdev 0 0" >> $FSTAB
fi
chmod u+s /sbin/mount.davfs
usermod -a -G davfs2 user
split на bash'і
snat=(
55410:192.168.10.99:80
55415:192.168.10.199:80
55411:192.168.20.99:80
55412:192.168.30.199:80
55413:192.168.24.99:80
55414:192.168.20.199:80
)
for i in ${snat[@]}; do
set -- "$i"
IFS=":"; declare -a Array=($*)
iptables -A FORWARD -p tcp -s ${Array[1]} --sport ${Array[2]} -j ACCEPT
iptables -A FORWARD -p tcp -d ${Array[1]} --dport ${Array[2]} -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport ${Array[0]} -j DNAT --to-destination ${Array[1]}\:${Array[2]}
echo "${Array[@]}"
done
п.с. збоченська мова
програмне (HTTP) перезавантаження китайських ІР-камер
Є ноунеймовська китайська ІР-камера. Постала задача програмно її перевантажувати. Перше що спало на думку - телнет. І він виявився навіть відкритим, але зайти таки не вдалось. Так званий український сапорт сказав що телнет не працює, закрили його китайці. Довелось копати в сторону HTTP.
Отож рішення:
Подібним методом можна автоматизувати не лише камери. FireBug в поміч.
Отож рішення:
wget --cookies=on \
--keep-session-cookies \
--save-cookies cookies.txt \
--post-data 'A=login&B=password&button=Login' \
http://x.y.z.x/cgi-bin/LoginAction.cgi
wget --load-cookies cookies.txt \
-p http://x.y.z.x/cgi-bin/Reboot.cgi
Подібним методом можна автоматизувати не лише камери. FireBug в поміч.
простенький скрипт резервного копіювання
#!/bin/bash
DATE=`date +%Y%m%d%H`
BACKUP_DIR=/mnt/backups/backups
dirs=( /mnt/dir1
/mnt/file1
/mnt/dir2
)
for i in ${dirs[@]}; do
tar -cvf $BACKUP_DIR/${i##*/}-$DATE.tar $i
gzip $BACKUP_DIR/${i##*/}-$DATE.tar
done
find $BACKUP_DIR/* -maxdepth 0 -ctime +15 -type f -exec rm -rfv {} \;
Перевірялка Апача на живучість
#!/bin/bash
PATH=/bin:/usr/bin
THEDIR=/tmp/apache-watchdog
EMAIL=blablabla@gmail.com
mkdir -p $THEDIR
if ( wget --timeout=30 -q -P $THEDIR http://localhost/robots.txt )
then
# we are up
touch ~/.apache-was-up
else
# down! but if it was down already, don't keep spamming
if [[ -f ~/.apache-was-up ]]
then
# write a nice e-mail
echo -n "apache crashed at " > $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Access log:" >> $THEDIR/mail
tail -n 30 /var/log/httpd/access_log >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Error log:" >> $THEDIR/mail
tail -n 30 /var/log/httpd/access_log >> $THEDIR/mail
echo >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/etc/rc.d/init.d/httpd stop >> $THEDIR/mail 2>&1
killall -9 httpd >> $THEDIR/mail 2>&1
/etc/rc.d/init.d/httpd start >> $THEDIR/mail 2>&1
# send the mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
mail -s "apache-watchdog: apache crashed" $EMAIL < $THEDIR/mail
rm ~/.apache-was-up
fi
fi
rm -rf $THEDIR
(c) десь нагуглено і допиляно під федору
пакетна нормалізація звуку в avi файлах
Є старий DVD-плеєр в публічному місці, який не має функції shuffle (випадкового програвання файлів з плей-ліста), крім того, старі відео-файли мають різний рівень звуку, що створює певні незручності.
Погуглив віндові рішення, але нічого толкового і безкоштовного не знайшов. Тож лінукс виручає, як завжди.
Погуглив віндові рішення, але нічого толкового і безкоштовного не знайшов. Тож лінукс виручає, як завжди.
#!/bin/bash
IN_DIR="music_in"
OUT_DIR="music_out"
for i in `ls $IN_DIR`; do
##### extract MP3 file
ffmpeg -i $IN_DIR/$i $OUT_DIR/$i.mp3
##### normalize MP3 file
normalize -m -v $OUT_DIR/$i.mp3
##### remove MP3 from AVI
ffmpeg -i $IN_DIR/$i -vcodec copy -an $OUT_DIR/$i.avi
##### merge AVI and new normalized MP3
ffmpeg -i $OUT_DIR/$i.avi \
-i $OUT_DIR/$i.mp3 \
-vcodec copy \
-acodec copy \
$OUT_DIR/$i.new.avi
##### remove temp files
rm -f $OUT_DIR/$i.mp3
rm -f $OUT_DIR/$i.avi
##### change filename to random
mv $OUT_DIR/$i.new.avi $OUT_DIR/$RANDOM.avi
done
Підписатися на:
Дописи (Atom)