Вместо того, чтобы делать это как @reboot, что, если Вы реструктурировали вещи немного так, чтобы это было, говорит каждые несколько минут и сделало проверку, чтобы видеть, работал ли tmux уже, в противном случае затем назовите Ваш tmux_autostart.sh
.
Каждые 5 минут, выполненных, чтобы видеть, если tmux_autostart.sh
работает. Для начинающих тест как это будет видеть если tmux_autostart.sh
произошел:
# down
$ ps -eaf|grep -q "[t]mux_autostart.sh"
$ echo $?
1
# up
$ ps -eaf|grep -q "[t]mux_autostart.sh"
$ echo $?
0
Мы можем затем использовать это выше теста как так в нашем кроне:
*/5 * * * * ps -eaf|grep -q "[t]mux_autostart.sh" && /root/scripts/tmux_autostart.sh
Если Вы только интересуетесь запуском этого, когда Вы входите в систему, я полагаю, что Вы могли поместить свой сценарий в файл $HOME/.xintrc
. Затем это будет работать, когда Вы войдете в систему.
также может ли этот скрипт оптимизировать в одну строку команду?
I ' D рассмотрим использование функции -O
-O команды
для вывода (как можно дальше) только для процентов, а затем после обработки, которая соответствует Java
Процессы и определенные командные аргументы (ы), которые вам требуются - что-то вроде
ps -u $USER -o uname=,pid=,args= |
gawk -vOFS='\t' '/java/ {print $1,$2,substr($0,match($0,"-D(app[.]name)|(projectName)[^[:space:]]*"),RLENGTH)}'
или, возможно, что-то вроде этого в Perl
( Отказ от ответственности: Мои знания Perl - это схематично )
ps -u $USER -o uname=,pid=,args= |
perl -anle 'print join "\t", @F[0], @F[1], grep /-D(app[.]name)|(projectName)/,@F if /java/'
Для выравнивания таблиц общего назначения нужна утилита из столбца
.
Например:
(
printf 'PID\tUSER\tAPPNAME\n'
printf '%s\t%s\t%s\n' "1" "john" "foo bar"
printf '%s\t%s\t%s\n' "12345678" "someone_with_a_long_name" "pop tart"
) | column -t -s $'\t'
Результат в:
PID USER APPNAME
1 john foo bar
12345678 someone_with_a_long_name pop tart
Используйте dd
для чтения раздела файла без чтения всего предшествующего.
Для примера (чтение байтов от 4 120 000 до 4 120 400) можно использовать
dd bs=400 skip=10300 count=1 if=your_input_file of=your_output_file
Это определяет размер логического блока в 400 байт,
и затем сообщает dd
пропустить первый 10300 "логических блоков" входного файла (, если
).
10300 - это 4,120,000 start400.
Затем считывает один блок ( count = 1
) из 400 байт и записывает его в выходной файл ( из
).
Если опустить из спецификации
,
dd
запишет в стандартный вывод, так что вы можете направить его в что-то.
Если начальная точка (смещение) не гарантирована быть целым числом, кратным размеру блока (или даже если оно есть), Вы можете делать более сложные вещи, как
(dd bs=10000 skip=412 count=0; dd bs=400 count=1 of=your_output_file) < your_input_file
или
(dd bs=4120000 skip=1 count=0; dd bs=400 count=1 of=your_output_file) < your_input_file
где
из спецификации
, и это будет запись в стандартный вывод. dd
без спецификации , если
, она считывается из стандартного ввода.
Стандартный вход для всего (dd...; dd...)
группа команд
поступает из < вашего _ входного файла _
в конце. dd
не считывает и не записывает данные из-за count = 0
;
он только стремится. dd
получают стандартный ввод от одного и того же перенаправления ввода-вывода,
поиск, выполняемый первым, повлияет на указатель файла, который видит второй. Что на самом деле делает commit ?
Я думаю, что одно из лучших объяснений было дано здесь allquixotic .
Есть ли на самом деле преимущества его увеличения (например, быстродействие и экономия электроэнергии)? Может ли это на самом деле привести к потере данных?
Согласно ext4 официальной документации :
Ext4 может быть сказано синхронизировать все свои данные и метаданные каждые "nrsec" секунд. Значение по умолчанию - 5 секунд. Это означает, что если вы потеряете свою мощность, вы потеряете столько же, сколько последние 5 секунд работы (ваша файловая система не будет повреждена, однако, благодаря journaling). Это значение по умолчанию (или любое низкое значение) приведет к снижению производительности , но это хорошо для безопасности данных . Установка значения 0 будет иметь тот же эффект, что и при сохранении значения по умолчанию (5 секунд). Установка для очень больших значений повысит производительность .
Увеличение значения commit
означает, что вы можете потерять столько же, сколько последние N секунд работы (где N = интервал фиксации), хотя большую часть времени это не произойдет , поскольку программное обеспечение все еще может вызвать fsync () и получить свои данные, записанные на диск, переопределяя параметр фиксации. На него можно было смотреть как на "записывать все на диск хотя бы так часто" . 1
С другой стороны, это означает меньше записей (что делает его довольно популярным среди пользователей ssd) и лучшую производительность (множественные записи объединяются в одну единственную более крупную запись, обновления предыдущих записей в течение интервала времени фиксации отменяются).
Что касается экономии энергии, то, согласно этой странице , в настоящее время возрастающее значение commit
не экономит энергию.
Вот еще один, в котором используется форматирование вывода из ps
:
#!/usr/bin/sh -f
printf '%-8.7s%-8s%s\n' $(
ps -o uname=UID,pid=PID,args=APPNAME |
sed -n '1p;s/\( [0-9]* \).*\(-Dapp.name=[^ ]*\).*/\1\2/p'
)
В зависимости от его формата последовательность, для каждого 3 его аргументов printf
будет напечатана:
\n
ewline. Подстановка команды не цитируется специально . Обратите внимание на -f
, следующий за sh
в bang-line - он указывает, что оболочка должна не glob - поэтому нет опасности случайного создания имен файлов на основе специальных символов оболочки. Замена команды будет разделена на значения по умолчанию $ IFS
- космоса, tab, newline.
В подмене команды ps
печатает столбцы 3 - с UID , PID и APPNAME . ps
указан POSIX не для печати мест в любом поле , за исключением поля args =
. Таким образом, первые два столбца являются $ IFS
безопасными. Тем не менее, чтобы получить строку -Dapp.name
из поля args =
, ее необходимо обработать.
Поэтому sed
фильтрует его. В строках, содержащих по крайней мере два космический и строку -Dapp.name = , она печатает:
sed
не влияют на заголовки столбцов, напечатанные с 1p
, поскольку они не содержат -Dapp.name = последовательностей. Все остальные строки удаляются из выходных данных.
После применения printf
к sed
произвел разделение на $IFS
, вы можете ожидать продукцию как следующее:
UID PID APPNAME
sas 24431 -Dapp.name=myApp
sas 24431 -Dapp.name=myApp
sas 24431 -Dapp.name=myApp
sas 24431 -Dapp.name=myApp
sas 24431 -Dapp.name=myApp
, По-моему, тем не менее, этот заявление sed
работало бы немного лучше:
sed -n '1p;s/\( [0-9]* \).*-Dapp.name=\([^ ]*\).*/\1\2/p'
Это - в основном то же, за исключением того, что полосы -Dapp.name = часть от \2
, таким образом, это печатает как...
UID PID APPNAME
sas 24431 myApp
sas 24431 myApp
sas 24431 myApp
Потому что, поскольку это только печать строк, содержащих последовательность -Dapp.name = в любом случае, включая это своего рода просто нагромождение, которое в противном случае можно воспринимать как должное.