piston/lxc/execute

56 lines
1.2 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
dir="$( cd "$( dirname "$0" )" && pwd )"
2018-11-02 06:21:22 +01:00
touch $dir/lockfile
2021-01-16 00:53:51 +01:00
if [ -z "$1" ] || [ -z "$2" ]; then
echo "invalid args"
exit
fi
2021-01-25 18:24:34 +01:00
language=$1
id=$2
2021-01-25 18:24:34 +01:00
basepath="/var/lib/lxc/piston/rootfs"
2018-10-24 07:34:33 +02:00
# process incrementor
2018-11-02 06:21:22 +01:00
exec 200>$dir/lockfile
2021-01-25 18:24:34 +01:00
flock 200
2018-10-24 07:34:33 +02:00
touch $dir/i
2021-01-25 18:24:34 +01:00
runner=$(cat $dir/i)
let 'runner = runner % 150 + 1'
echo $runner > $dir/i
2018-11-02 06:21:22 +01:00
exec 200>&-
2021-01-23 22:24:23 +01:00
# prevent users from spying on each other
lxc-attach --clear-env -n piston -- \
/bin/bash -c "
2021-01-25 19:27:11 +01:00
chown runner$runner: -R /tmp/$id
2021-01-25 18:24:34 +01:00
chmod 700 /tmp/$id
2021-01-23 22:24:23 +01:00
" > /dev/null 2>&1
2018-10-24 07:34:33 +02:00
# runner
timeout -s KILL 20 \
lxc-attach --clear-env -n piston -- \
/bin/bash -l -c "runuser runner$runner /exec/$language $id"
2018-10-24 07:34:33 +02:00
# process janitor
lxc-attach --clear-env -n piston -- \
/bin/bash -c "
while pgrep -u runner$runner > /dev/null
2021-01-17 14:50:40 +01:00
do
2021-01-25 18:24:34 +01:00
pkill -u runner$runner --signal SIGKILL
2021-01-17 14:50:40 +01:00
done
2021-01-25 18:24:34 +01:00
find /tmp -user runner$runner -delete
find /var/tmp -user runner$runner -delete
find /var/lock -user runner$runner -delete
find /dev/shm -user runner$runner -delete
find /run/lock -user runner$runner -delete
2021-01-17 14:50:40 +01:00
" > /dev/null 2>&1 &
2021-01-25 18:24:34 +01:00
rm -rf $basepath/tmp/$id