В маршрутизаторе с довольно ограниченной оболочкой Busybox (версия 1.24.2) я хочу убедиться, что сценарий оболочки резервного копирования (rsync) выполняется только тогда, когда он еще не запущен.
Ответы для полноценной оболочки Bash, как в:
- Быстрый и грязный способ убедиться, что одновременно работает только один экземпляр сценария оболочки
- Сценарий оболочки: убедитесь, что сценарий не выполняется, если уже выполняется
несовместимы с поврежденной пепельной оболочкой Busybox.
Прошивка маршрутизатора предоставляет следующие команды busybox:
[, [[, addgroup, adduser, arp, arping, ash, awk, basename, bash, brctl, bunzip2, bzcat, bzip2, cat, chgrp, chmod, chown, chpasswd, chroot, clear, cp, crond, crontab, cut, date, dd, df,
dhcp6c, dirname, dmesg, dnsdomainname, dos2unix, du, echo, egrep, eject, env, ether-wake, expr, false, fdisk, fgrep, find, flock, free, fuser, grep, gunzip, gzip, head, hostname,
ifconfig, inetd, insmod, kill, killall, klogd, ln, logger, login, ls, lsmod, lsof, md5sum, mdev, microcom, mkdir, mknod, mkswap, modprobe, more, mount, mountpoint, mv, netstat, nice,
nslookup, ntpd, passwd, pgrep, pidof, ping, ping6, printf, ps, pwd, rm, rmdir, rmmod, route, sed, sendmail, seq, sh, sleep, sort, start-stop-daemon, stat, strings, swapoff, swapon,
switch_root, sync, sysctl, syslogd, tail, tar, tee, telnetd, test, time, top, touch, tr, traceroute, traceroute6, true, udhcpc, umount, uname, uniq, unix2dos, unlink, uptime, usleep,
vconfig, vi, watch, wc, wget, which, whoami, xargs, yes, zcat, zcip
flock
решение для самовызова возвращает exit 1
при первом вызове. Используемый тестовый скрипт:
#!/bin/sh
[ "${FLOCKER}" != "$0" ] && exec /usr/bin/env FLOCKER="$0" /usr/bin/flock "$0" "$0" "$@" || exit 1
echo "servus!"
/bin/sleep 30
Предложение ps
из ответа на https://unix.stackexchange.com/questions/48505/how-to-make-sure-only-one-instance-of-a-bash-script-runs#answer-48511 многообещающе, но все еще не совместимо с уменьшенной оболочкой Busybox маршрутизатора. Busybox поставляется с командой ps
, но только с опциями w
, l
и T
.
Есть предложения, не ловит nano
или другой редактор с открытым скриптом?
flock
в этом списке. Вы можете использовать это, чтобы убедиться, что только один экземпляр вашего сценария резервного копирования запускается одновременно. Один из ответов, которые вы связали, выглядит так, как будто он показывает, как это сделать. - person Shawn   schedule 03.09.2018