В строках ниже, которые я добавил к своей копии сценария sysdiagnose
от Apple:
- везде, где тайм-аут уже прописан, он эффективен
- Я должен добавить таймауты в двух областях, но я не знаю, как это сделать.
В двух областях IFS=$'\n'
…
# If there exists a zfs binary, get some ZFS information
if [ -f "${ZFS}" ]
then
#
# The pool part
#
"${ECHO}" "Recording ZFS pool version information ..."
"${ZPOOL}" upgrade &> ${data_directory_path}/"ZFS pools and properties.txt" &
add_timeout_pid $! 30
"${ECHO}" " listing all ZFS pools ..."
"${ECHO}" "" >> ${data_directory_path}/"ZFS pools and properties.txt"
"${ECHO}" "ZFS pools:" >> ${data_directory_path}/"ZFS pools and properties.txt"
"${ECHO}" "" >> ${data_directory_path}/"ZFS pools and properties.txt"
"${ZPOOL}" list >> ${data_directory_path}/"ZFS pools and properties.txt" &
add_timeout_pid $! 30
"${ECHO}" " all properties of each pool ..."
OLD_IFS=$IFS
IFS=$'\n'
# If cut or zpool can not progress, then at this point: sysdiagnose will not progress
# <https://superuser.com/q/540939/84988>
for zfspool in `"${ZPOOL}" list -H | cut -f 1`
do
{ echo "\n*********************\n" ; "${ZPOOL}" get all "$zfspool" ; } >> ${data_directory_path}/"ZFS pools and properties.txt"
done
IFS=$OLD_IFS
"${ECHO}" " detailed health status and verbose data error information ..."
"${ZPOOL}" status -v &> ${data_directory_path}/"ZFS pool detailed health status and verbose data error information.txt" &
add_timeout_pid $! 30
"${ECHO}" " pools that are available but not currently imported"
"${ZPOOL}" import &> ${data_directory_path}/"ZFS pools not imported.txt" &
add_timeout_pid $! 30
#
# The file system part
#
"${ECHO}" "Recording ZFS file system version information ..."
{ "${ZFS}" upgrade ; "${ECHO}" "\n" ; } &> ${data_directory_path}/"ZFS file systems and properties.txt" &
add_timeout_pid $! 30
"${ECHO}" " listing all ZFS file systems ..."
#"${ECHO}" "ZFS file systems:" >> ${data_directory_path}/"ZFS file systems and properties.txt"
"${ZFS}" list >> ${data_directory_path}/"ZFS file systems and properties.txt" &
add_timeout_pid $! 30
"${ECHO}" " all properties of each file system"
OLD_IFS=$IFS
IFS=$'\n'
# If cut or zfs can not progress, then at this point: sysdiagnose will not progress
# <https://superuser.com/q/540939/84988>
for zfsfilesystem in `zfs list -H | cut -f 1`
do
{ echo "\n*********************\n" ; "${ZFS}" get all "$zfsfilesystem" ; } >> ${data_directory_path}/"ZFS file systems and properties.txt"
done
IFS=$OLD_IFS
#
# Directory listings
#
"${ECHO}" "Listing the contents of /dev/dsk"
{ "${ECHO}" "Directory listing for /dev/dsk" ; echo "\n"; } >> ${data_directory_path}/"ZEVO-oriented directory listings.txt"
{ "${LS}" -@ael /dev/dsk ; echo "\n*********************\n" ; } >> ${data_directory_path}/"ZEVO-oriented directory listings.txt" &
add_timeout_pid $! 30
"${ECHO}" "Listing the contents of /var/zfs/dsk"
{ "${ECHO}" "Directory listing for /var/zfs/dsk" ; echo "\n" ; } >> ${data_directory_path}/"ZEVO-oriented directory listings.txt"
"${LS}" -@ael /var/zfs/dsk >> ${data_directory_path}/"ZEVO-oriented directory listings.txt" &
add_timeout_pid $! 30
fi
Обратите внимание на комментарий:
# If cut or zpool can not progress, then at this point: sysdiagnose will not progress
Вопрос
Как я могу написать add_timeout_pid $! 30
в эти две области?
Фон
Хотя я не могу воспроизвести сценарий полностью (он не с открытым исходным кодом), пользователи Lion и выше могут найти сценарий Apple удобочитаемым:
/usr/bin/sysdiagnose
связи
sysdiagnose(1) Страница руководства по OS X
Принятый ответ на Обработка пробелов в имени набора данных ZFS в сценарии оболочки
Также в Super User принудительно запускайте сценарий bash, где некоторые элементы могут придерживаться, но ответ здесь не годится для команд (таких как cut
, zfs
и zpool
), у которых нет опции тайм-аута.