Символ расширения истории !
является особенным, даже когда это между двойными кавычками, но это теряет свое особое значение между одинарными кавычками.
Здесь, это в дважды заключенной в кавычки строке "Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'"
. Одинарные кавычки в той строке являются обычными символами в той строке, они не интерпретируются особенно. Здесь нет никакой единственно заключенной в кавычки строки.
Если Вы добавляете обратную косую черту, она защищает !
от инициирования расширения истории, но самой обратной косой черты остается. Таким образом, Вы заканчиваете с заголовком Authorization: Bearer '00DE0000000K0eM\!AQYAQGgmLxxxxxxxxx'
.
Если заголовок должен быть Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxx'
, можно указать его этот путь:
curl https://foo.my.salesforce.com/services/data/v28.0/ -H 'Authorization: Bearer '\''00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'\'
Я считаю, что это просто опечатка. Попробуйте заменить
Xterm*faceName: DejaVu Sans Mono Bold:size=11
на
XTerm*faceName: DejaVu Sans Mono Bold:size=11
( XTerm
, а не Xterm
)
Я нашел следующую помощь в этой проблеме:
ipmitool bmc info
Это, кажется, пробуждает IPMI, а затем прекращает использовать 100% ядра.
Я также нашел следующее полезное:
echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us
Также в прошлом я был в состоянии на некоторых серверах разрешить 100% использование ЦП путем:
ipmitool lan print
и
ipmitool bmc reset cold
, но в моем последнем опыте вышеперечисленные варианты просто привести ipmitool
не реагировать и сидеть там, заставляя меня Ctrl + C это.
Надеюсь, это кому-то поможет.
-121--28418- Можно запустить процесс, который будет посылать сигнал (например, SIGALRM
) в сценарий оболочки каждый раз x и использовать ловушку для этого сигнала. Этот процесс может быть сценарием, выполняющим следующее действие:
set -e
while true
do
sleep 300
kill -ALRM $PPID
done
, если он запускается сценарием основной оболочки.
Сценарий основной оболочки должен уничтожать этот процесс, когда он больше не нужен, и/или процесс должен завершаться, когда pid больше не существует (однако для этого существует условие гонки).
Примечание: если сценарий основной оболочки использует команду sleep
, он будет взаимодействовать с сигналом ALRM
, но вместо этого можно использовать SIGUSR1
или SIGUSR2
.
Вот пример использования субкорпуса. Чтобы сделать поведение более удобным для просмотра, я заменил 5-минутный период ( sleep 300
) на 5-секундный период ( sleep 5
).
#!/bin/sh
{
set -e
while true
do
sleep 5
# Since this is run as a subshell (instead of an external command),
# the parent pid is $$, not $PPID.
kill -USR1 $$
done
} &
trap 'echo "Signal USR1 received."' USR1
while true
do
date
sleep 1
done
Сценарий может быть прерван с помощью Ctrl-C. Он не убивает субоболочку, когда это происходит, но если pid не используется повторно, то субоболочка завершается автоматически не более чем через период (здесь, 5 секунд), так как команда kill
завершается неуспешно ( kill: No this process
).
Да. Самый простой способ - сделать это примерно так, как вы первоначально описали в своем вопросе. Просто часть того чего-то , которое вы делаете, должна порождать другой дочерний процесс, чтобы послать вашему процессу сигнал через 5 минут в будущем. Взяв страницу из книги @ vinc17, я также сокращу интервал до 5 секунд.
trap 'ME=$$
: $( (sleep 5
ps -p $ME >/dev/null 2>&1 && {
echo hey >/dev/tty
kill -USR1 $ME
})&)
' USR1; kill -USR1 $$
Таким образом, у вас не будет длительного процесса, который просто просит вас зомбировать. Вместо этого у вас есть новый специализированный счетчик, который получает новую ссылку на родительский PID через каждый интервал. Я также включил небольшую проверку, чтобы убедиться, что ребенок не пытается выполнить свою единственную работу в случае, если его родитель умер после того, как он отсоединился.
Выполняйте это, и каждые 5 секунд вы должны получать:
hey
hey
hey
hey
hey
hey
hey
hey
hey
hey
В этом примере также, скорее всего, терминал тем временем зависнет, иначе он вообще ничего не сделает, если вы попытаетесь запустить весь процесс в фоновом режиме. Это связано с тем, что он удерживает / dev / tty
- вместо этого выберите файл, если вы имеете в виду запускать все это в фоновом режиме, иначе выполните прямой вызов stty
и повторно выполните tty, когда захотите.
Замените sleep $time
на sleep $time & wait $!
, чтобы ловушка USR1 срабатывала, когда ожидается. См. ответ на другой вопрос или главу СИГНАЛЫ страницы руководства bash для объяснения.
В моей системе сигнал ALRM работает так же хорошо, как и USR1.