Как установить демон nfslock

AWK ожидает, что его аргументы будут либо текстом сценария, либо -f, за которым следует имя файла, содержащего запускаемый сценарий, в обоих случаях необязательно за которым следуют имена обрабатываемых файлов.

Это объясняет, почему вам нужно -fв строке shebang :без этого, AWK считает, что имя файла вашего скрипта само по себе является операторами AWK для запуска.

Что касается обработки аргументов, программа AWK может выполнять свою собственную обработку аргументов, если она того пожелает. Ваш скрипт не работает из-за строки {print $0}:, которая указывает интерпретатору читать каждую строку со своего ввода (файлов, названных в командной строке, поскольку вы указали некоторые )и обрабатывать их в соответствии с инструкции в блоке. Если вы удалите эту строку, вы не получите никаких ошибок. Вы можете обработать аргументы в BEGINи очистить ARGV, чтобы он содержал только входные файлы; тогда AWK не будет жаловаться.

Попытка полностью самостоятельно обрабатывать аргументы и ввод, вероятно, означала бы игнорирование многих вещей, которые делают AWK таким полезным; если вы хотите сделать это, вы можете использовать Perl.

(Обратите внимание, что обработка shebang означает, что вы можете хранить простые скрипты AWK в их именах файлов, что позволяет избежать поиска умных имен для скриптов — не то, чтобы кто-то должен это делать...)

0
22.11.2019, 21:38
3 ответа

Старые версии NFS (v2/v3 )можно было использовать без блокировок. Для поддержки блокировок на сервере использовался отдельный демон блокировки, наряду с nfsd.

В NFSv4 (, вопрос с которым отмечен тегом ), блокировка является обязательной частью протокола, а отдельный демон блокировки не используется для служб v4.

Если у вас есть монтирование nfsv4, вы сможете заблокировать файл внутри так же, как вы блокируете файл в локальной файловой системе.

Thanks for your comments I want to lock file in server itself, if one client use a file, another client don't access until first client release. I want to avoid this type race condition.

Unix использует рекомендательную блокировку, применяемую на клиенте, а не на файловой системе (, как это обычно делает Windows ). Это означает, что все ваши клиенты должны участвовать в блокировке.

Если ваши клиенты запрашивают блокировку перед доступом к файлу, все будет хорошо. Только после того, как другие клиенты снимут блокировку, а другой клиент получит блокировку. Вызовы fcntlобычно поддерживаются как в локальной файловой системе, так и в файловой системе NFS.

Взгляните на Блокировка файлов в UNIX в Википедии для получения дополнительной информации.

0
28.01.2020, 03:05

Блокировка NFS является частью процесса NFS. Вы его не устанавливаете. Кроме того, это не работает, как вы думаете. Если вы используете это, блокировка MUTEX не будет передана на все серверы. Единственное программное обеспечение, которое я когда-либо видел, делает это хорошо, это VERITAS.

0
28.01.2020, 03:05

Я не могу сказать конкретно для Debian, но это мой /etc/sysconfig/nfsфайл из SLES 11.4 (, который, по-моему, использует NFS v3 ).

#    # Path:        Network/File systems/NFS server
#    # Description:     number of threads for kernel nfs server
#    # Type:        integer
#    # Default:     4
#    # ServiceRestart:  nfsserver
#
# the kernel nfs-server supports multiple server threads
#
USE_KERNEL_NFSD_NUMBER="4"

#    # Path:        Network/File systems/NFS server
#    # Description:     use fixed port number for mountd
#    # Type:        integer
#    # Default:     ""
#    # ServiceRestart:  nfsserver
#
#  Only set this if you want to start mountd on a fixed
#  port instead of the port assigned by rpc. Only for use
#  to export nfs-filesystems through firewalls.
#
MOUNTD_PORT=" xxx  "   set to port opened in firewall!

#    # Path:                Network/File systems/NFS server
#    # Description:         GSS security for NFS
#    # Type:                yesno
#    # Default:             yes
#    # ServiceRestart:      nfs nfsserver
#
# Enable RPCSEC_GSS security for NFS (yes/no)
#
NFS_SECURITY_GSS="no"

#    # Path:                Network/File systems/NFS server
#    # Description:         NFSv4 protocol support
#    # Type:                yesno
#    # Default:             yes
#    # ServiceRestart:      nfs nfsserver
#
# Enable NFSv4 support (yes/no)
#
NFS4_SUPPORT="no"

#    # Path:                Network/File systems/NFS server
#    # Description:         NFSv4 server minor version
#    # Type:                integer
#    # Default:             0
#    # ServiceRestart:      nfsserver
#
# Select NFSv4 minor version for server to support (0, 1).
# If '1' is selected, both NFSv4.0 and NFSv4.1 will be supported.
NFS4_SERVER_MINOR_VERSION="0"

#    # Path:                Network/File systems/NFS server
#    # Description:         Network Status Monitor options
#    # Type:                string
#    # Default:             ""
#
# If a fixed port should be used to send reboot notification
# messages to other systems, that port should be given
# here as "-p portnumber".
#
SM_NOTIFY_OPTIONS="-p xxxxx"    set to port opened in firewall

#    # Path:                Network/File systems/NFS server
#    # Description:         Always start NFS services
#    # Type:                yesno
#    # Default:             no
#    # ServiceRestart       nfs
#
# Always start NFS services (gssd, idmapd), not only if
# there are nfs mounts in /etc/fstab.  This is likely to be
# needed if you use an automounter for NFS.
#
NFS_START_SERVICES=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Port rpc.statd should listen on
#    # Type:                integer
#    # Default:             ""
#    # ServiceRestart:      nfsserver
#
# Statd will normally choose a random port to listen on and
# SuSE-Firewall is able to detect which port and allow for it.
# If you have another firewall, you may want to set a fixed
# port number which can then be opened in that firewall.
#
STATD_PORT="xxxxx"     set to port opened in firewall

#    # Path:                Network/File systems/NFS server
#    # Description:         Hostname used by rpc.statd
#    # Type:                string
#    # Default:             ""
#    # ServiceRestart:      nfsserver
#
# statd will normally use the system hostname in status
# monitoring conversations with other hosts.  If a different
# host name should be used, as can be useful with fail-over
# configurations, that name should be given here.
#
STATD_HOSTNAME=""

#    # Path:                Network/File systems/NFS server
#    # Description:     TCP Port that lockd should listen on
#    # Type:                integer
#    # Default:             ""
#    # ServiceRestart:      nfsserver
#
# Lockd will normally choose a random port to listen on and
# SuSE-Firewall is able to detect which port and allow for it.
# If you have another firewall, you may want to set a fixed
# port number which can then be opened in that firewall.
# lockd opens a UDP and a TCP port.  This setting only affect
# the TCP port.
#
LOCKD_TCPPORT="xxxxx"    set to port opened in firewall

#    # Path:                Network/File systems/NFS server
#    # Description:     UDP Port that lockd should listen on
#    # Type:                integer
#    # Default:             ""
#    # ServiceRestart:      nfsserver
#
# Lockd will normally choose a random port to listen on and
# SuSE-Firewall is able to detect which port and allow for it.
# If you have another firewall, you may want to set a fixed
# port number which can then be opened in that firewall.
# lockd opens a UDP and a TCP port.  This setting only affect
# the UDP port.
#
LOCKD_UDPPORT="xxxxx"   set to port opened in firewall

#    # Path:                Network/File systems/NFS server
#    # Description:         Lease time for NFSv4 leases
#    # Type:                integer
#    # Default:             ""
#
# Set the lease time for the NFSv4 server.  This allows new locks
# to be taken sooner after a server restart, so it is useful for
# servers which need to recover quickly after a failure, particularly
# in fail-over configurations.  Reducing the lease time can be a
# problem is some clients connect over high latency networks.
# The default is 90 seconds.  A number like 15 might be appropriate
# in a fail-over configuration with all clients on well connected
# low latency links.
NFSV4LEASETIME=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Alternate mount point for rpc_pipefs filesystem
#    # Type:                string
#    # Default:             ""
#
# In a high-availabilty configuration it is possible that /var/lib/nfs
# is redirected so some shared storage and so it is not convenient to
# mount the rpc_pipefs filesystem at /var/lib/nfs/rpc_pipefs.  In that
# case an alternate mount point can be given here.
RPC_PIPEFS_DIR=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Options for svcgssd
#    # Type:                string
#    # Default:             ""
#
# Normally svcgssd does not require any option.  However in a
# high-availabilty configuration it can be useful to pass "-n"
# to guide the choice of default credential.  To allow for that
# case or any other requiring options ot svcgssd, they can
# be specified here.
SVCGSSD_OPTIONS=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Extra options for nfsd
#    # Type:                string
#    # Default:             ""
#
# This setting allows extra options to be specified for NFSD, such as
# -H <shared_hostname> in a high-availability configuration.
NFSD_OPTIONS=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Extra options for gssd
#    # Type:                string
#    # Default:             ""
#
# Normally gssd does not require any options.  In some circumstances,
# -n, -l or other options might be useful. See "man 8 rpc.gssd" for
# details.  Those options can be set here.
GSSD_OPTIONS=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Extra options for mountd
#    # Type:                string
#    # Default:             ""
#
# Normally mountd does not require any options.  In some circumstances,
# -n, -t, -g or other options might be useful. See "man 8 rpc.mountd" for
# details.  Those options can be set here.
# -p or -N should be set using MOUNTD_PORT or NFS4_SUPPORT rather than
# this option.
MOUNTD_OPTIONS=""

#    # Path:                Network/File systems/NFS server
#    # Description:         Avoid DNS lookups for kerberos principal
#    # Type:                yesno
#    # Default:             no
#    # ServiceRestart:      gssd
#
# Avoid DNS lookups when determining kerberos identity
# of NFS server (yes/no)
# "yes" is safest, but "no" might be needed to preserve
# correct behaviour at sites that don't use
# Fully Qualified Domain Names when mounting NFS Shares.
#
NFS_GSSD_AVOID_DNS="no"

«Демон блокировки nfs» должен быть частью установленного пакета nfs и должен просто работать. Зависимостью от NFS является RPC с rpc.mountdи rpc.statdи rpc.lockd. Таким образом, с правильно установленной NFS (вместе с необходимыми зависимостями, такими как RPC и Portmap ), она должна работать, если вы либо отключите брандмауэр, либо настроите статические порты для lockdи mountd. Если вы не укажете статический порт, то NFS будет выбирать эти случайным образом при каждом запуске [во время загрузки]. С брандмауэром [обычно включенным по умолчанию] вы никогда не сможете учитывать эти случайно выбранные номера портов, и это будет препятствовать работе механизма блокировки каждый раз.

обратите внимание, моя информация здесь НЕ для NFSv4.

0
28.01.2020, 03:05

Теги

Похожие вопросы