55 lines
950 B
Bash
Executable File
55 lines
950 B
Bash
Executable File
#!/bin/sh -e
|
|
### BEGIN INIT INFO
|
|
# Provides: fstrim
|
|
# Required-Start:
|
|
# Required-Stop:
|
|
# Default-Start: S
|
|
# Default-Stop:
|
|
# Description: Discard unused blocks on all filesystems
|
|
### END INIT INFO
|
|
|
|
PID_FILE=/var/run/fstrim.pid
|
|
INTERVAL=$((60 * 60)) # 1 hour
|
|
|
|
fstrim_stop()
|
|
{
|
|
PID=$(cat $PID_FILE 2>/dev/null || true)
|
|
[ "$PID" ] || return 0
|
|
|
|
logger -s -t fstrim "Stopping fstrim process ($PID)..."
|
|
kill -9 -$PID 2>/dev/null || true
|
|
rm -f "$PID_FILE"
|
|
}
|
|
|
|
fstrim_start()
|
|
{
|
|
fstrim_stop
|
|
|
|
{
|
|
trap 'rm -f "$PID_FILE"' EXIT QUIT TERM INT
|
|
echo $$ > $PID_FILE
|
|
|
|
logger -s -t fstrim "Starting fstrim process ($$)..."
|
|
while true; do
|
|
cut -d' ' -f2 /proc/mounts | \
|
|
xargs -n 1 /sbin/fstrim -v 2>/dev/null | \
|
|
logger -t fstrim || true
|
|
sleep $INTERVAL
|
|
done
|
|
}&
|
|
}
|
|
|
|
case "$1" in
|
|
start|restart|reload|force-reload|"") fstrim_start ;;
|
|
stop) fstrim_stop ;;
|
|
status)
|
|
# No-op
|
|
;;
|
|
*)
|
|
echo "Usage: start" >&2
|
|
exit 3
|
|
;;
|
|
esac
|
|
|
|
:
|