Во-первых, вы не должны использовать для этого sudo crontab -e
. Это отредактирует файл crontab для пользователя root. Вам нужно это запустить в вашем пользовательском crontab, чтобы сохраненный сеанс gnome был вашим. Отбросьте sudo и просто запустите crontab -e
. При необходимости добавьте себя в файл cron.allow
, чтобы вы могли иметь файл crontab в качестве пользователя. (Также не забудьте снова отредактировать корневой каталог crontab и удалить эту запись.)
Во-вторых, вы не можете запускать такие вещи, как утилиты gnome из cron, не подключив их с правильными переменными $ DISPLAY
. Среда, которую cron передает своим дочерним элементам, далеко не так совершенна, как оболочка входа в систему, и, поскольку она не работает в вашей графической среде входа в систему, она не связана с ней. Учтите это: возможно работать более чем в одной графической среде. Как системный сценарий узнает, над каким из них вы хотите работать? Это не так. Вам нужно выяснить, на каком ДИСПЛЕЕ он работает, и передать его своей команде.
Наконец, похоже, что это ВСЕ не место, чтобы делать это в любом случае. Зачем вам периодически убивать сеанс? Все, что пользователь делает в этом моменте, будет уничтожено. Также cron запускается вне зависимости от того, вошел ли пользователь в систему, поэтому ему не всегда есть над чем работать.
GNU Parallel имеет накладные расходы в 2 -5 мс на задание, что приближается к вашим 100 записям в секунду. Чтобы смягчить это, вы можете обернуть его parallel --pipe
. Это должно выполнять около 25000 заданий параллельно в секунду на 100-ядерной машине :
#!/bin/bash
host="localhost"
port="********"
mycurl() {
if [ "${15}" != "" ]; then
# The numbering here should probably be adjusted
data="field1=${1}&field2=${2}&field3=${3}&field4=${4}&field5=${5}&field6=${6}&field7=${7}&field8=${8}&field9=${9}&field10=${10}"
curl --output /dev/null -d $data --silent -X POST https://myapi/myendpoint;
fi
}
export -f mycurl
#----------------------LOOP starts------------------------
while true;
do
nc -d $host $port
done |
parallel -j100 --pipe --block 100k parallel --colsep, -j0 mycurl
Почему бы не переводить каждый curl
вызов в фоновый режим:curl
... &
. Помещение амперсанда в конце команды оболочки похоже на использование двоеточия ;
semi -, только он переводит процесс в фоновый режим.