NetWorker : Utilisation de la commande nsrpolicy
Résumé: Cet article fournit des informations sur l’utilisation de la commande nsrpolicy de NetWorker pour effectuer des tâches d’administration NetWorker.
Instructions
La commande nsrpolicy command est une commande NetWorker d’administration qui est utilisée pour gérer et surveiller les politiques NetWorker. La plupart des mêmes fonctions sont exécutées à partir de NetWorker Management (NMC) et de l’interface utilisateur Web (NWUI). Cependant nsrpolicy Fournit des fonctionnalités de ligne de commande pour les administrateurs.
nsrpolicy Doit être exécuté dans l’une des conditions suivantes :
- Vous exécutez la commande à partir d’une invite avec élévation de privilèges. Commande de l’administrateur/invite PowerShell sous Windows, ou root/
sudoshell sous Linux. - Vous exécutez la commande à partir d’une invite sans élévation de privilèges, mais vous avez émis un jeton d’authentification NetWorker :
nsrlogin -u USERNAME
nsrlogin émet un jeton d’authentification temporel pour l’administration de NetWorker, à l’aide des informations d’identification de l’utilisateur NetWorker. Si vous utilisez nsrlogin, il est important de clore la session avec nsrlogout lorsque les activités sont terminées. Cela empêche les jetons obsolètes d’interférer avec les commandes suivantes.
Présentation générale de l’utilisation :
nsrpolicy
policy
create | delete | display | update | list
workflow
create | delete | display | update | list
action
create | delete | display | update | list
group
create | delete | display | update
start
Must have: -p [policy] -w [workflow]
Other options (NetWorker 9.2 and above for -c option): -c { <client_name1:[save_set_path_1;save_set_path_2],client_name2...> -s [NetWorker server] -D [debug level] -h
stop
Must have: Either -j [jobid] or -p [policy] -w [workflow]
Other options: -s [NetWorker server] -D [debug level] -h
monitor
Must have: -p [policy]
Other options: -w [workflow] -c [client] -g [group] -d [details] -n [non-tabular] -j [jobid] -s [NetWorker server] -D [debug level] -h
input-file
Must have: -f [file name]
Other options: [--stop_on_error -S <0/1; default:0 (Do not stop)>] [--stop_on_error -S <0/1; default:0 (Do not stop)>] -D [debug level] -h
restart
Must have: Either -j [jobid] or -p [policy] -w [workflow]
Other options: -s [NetWorker server] -D [debug level] -h
migrate
Must have what is to be migrated: group | schedule_clone | nas_device | vmware_policy
Other options: -s [NetWorker server] -D [debug level] -h
help
Exemples :
Répertoriez les objets de la zone de données :
nsrpolicy [object] list
Objets : politique, workflow, action
nsrpolicy policy list nsrpolicy workflow list -p "VMware Protection" nsrpolicy action list -p "VMware Protection" -w "Full VM"
Affichez les propriétés d’une action :nsrpolicy action display -p [policy] -w [workflow] -A [action]
nsrpolicy action display -p "VMware Protection" -w "Full VM" -A backup
Affichez les propriétés d’un groupe :nsrpolicy group display -g [group]
nsrpolicy group display -g "VMware Protection - Full VM"
Désactiver ou activer une action :nsrpolicy action update [action type backup subtype] -p [policy] -w [workflow] -A [action] -e [no/yes]
nsrpolicy action update backup traditional -p "Client Protection" -w "Traditional Client" -A backup -e no nsrpolicy action update backup traditional -p "Client Protection" -w "Traditional Client" -A backup -e yes
Pour modifier le planning associé à une action :nsrpolicy action update [action type backup subtype] -p [policy] -w [workflow] -A [action] -t [schedule]
nsrpolicy action update backup traditional -p "Client Protection" -w "Traditional Client" -A backup -t full,incr,incr,incr,incr,incr,incr
Ajouter un client à un groupe à l’aide d’un fichier d’entrée (une instance client doit déjà exister) :
Créez un fichier d’entrée avec le texte :group update client -g [group] --add_clnt_list [client]:[saveset]
[root@nsr ~]# cat AddTraditionalClient.txt group update client -g "Client Protection - Traditional Client" --add_clnt_list win-client03.amer.lan:All
nsrpolicy input-file -f "[path to input file]"
[root@nsr ~]# nsrpolicy input-file -f /root/AddTraditionalClient.txt 121415:nsrpolicy: Command from file: group update client -g "Client Protection - Traditional Client" --add_clnt_list win-client03.amer.lan:All 133584:nsrpolicy: Group 'Client Protection - Traditional Client' was successfully updated
Créez un workflow avec des valeurs autres que celles par défaut pour le commentaire, l’heure de début et le groupe :nsrpolicy workflow create -p [policy] -w [workflow] -c [comment] -g [group] -S [start time]
nsrpolicy workflow create -p "Client Protection" -w "Traditional Client - Linux" -c "Linux Clients" -g "Linux - Clients" -S "10:00"
Créez une nouvelle action avec des valeurs autres que celles par défaut pour le pool cible et le seuil de réussite :nsrpolicy action create [action type backup subtype] -p [policy] -w [workflow] -A [action] -o [target pool] -u [success threshold]
nsrpolicy action create backup traditional -p "Client Protection" -w "Traditional Client - Linux" -A backup -o "Data Domain Default" -u success
Démarrer un workflow (vous ne pouvez pas démarrer une action de cette manière. Vous devez démarrer l’ensemble du workflow).nsrpolicy start -p [policy] -w [workflow]
nsrpolicy start -p "Client Protection" -w "Traditional Client - Linux"
Arrêter un workflow :nsrpolicy stop -p [policy] -w [workflow]
nsrpolicy stop -p "Client Protection" -w "Traditional Client - Linux"
jobkill:
[root@nsr ~]# nsrpolicy start -p "Client Protection" -w "Traditional Client - Linux" 144091:nsrpolicy: Workflow 'Client Protection/Traditional Client - Linux' started and has job id 1248743 [root@nsr ~]# [root@nsr ~]# jobkill -j 1248743 Terminating job 1248743
Démarrer un client dans un workflow :nsrpolicy start -p [policy] -w [workflow] -c "[client]:[saveset]
nsrpolicy start -p "Client Protection" -w "Traditional Client - Linux" -c "rhel-client03.amer.lan:All"
Surveillez l’exécution la plus récente des workflows d’une règle :nsrpolicy monitor -p [policy] -dn
nsrpolicy monitor -p "Client Protection" -dn
nsrwatch pour surveiller les sessions.
Résultat détaillé d’une tâche récente spécifique :nsrpolicy monitor -j [job id]
nsrpolicy monitor -j 290473
jobquery:
jobquery
print type: backup action job
Pour démarrer un workflow en mode débogage, nsrpolicy n’est pas aussi efficace que le nsrworkflow command because 'nsrpolicy start' ne consigne pas la sortie de débogage dans le fichier /nsr/logs/policy dossier qui nsrworkflow volonté à la .raw .nsrworkflow -D[Debug Level] -p [policy] -w [workflow] -A "[action]"
nsrworkflow -D9 -p "Client Protection" -w "Traditional Client - Linux"
Pour plus d’informations sur les niveaux de débogage NetWorker, consultez : NetWorker : Niveaux d’informations de débogage
nsrworkflow debug débogue uniquement les messages côté serveur NetWorker. Elle n’ajoute pas de débogage aux opérations effectuées sur le client/système effectuant la sauvegarde.
Exemple d’activation save -D3 sauvegardes sur un client NetWorker, à l’aide de l’utilitaire de ligne de commande nsradmin :
[root@nsr ~]# nsradmin NetWorker administration program. Use the "help" command for help, "visual" for full-screen mode. nsradmin> . type : NSR Client; name : rhel-client03.amer.lan Current query set nsradmin> update backup command : save -D3 backup command: save -D3; Update? y updated resource id 48.0.46.11.0.0.0.0.231.177.13.90.10.60.28.121(13)
Dans l’exemple ci-dessus, lorsque le workflow du client est démarré, le save Le processus est démarré sur le client avec le débogage activé (-D3) dans ce cas-ci.
Pour déboguer des fonctions de sauvegarde spécifiques, consultez : NetWorker : Débogage des opérations de sauvegarde
Enregistrement:
Toutes les sauvegardes de politiques et de workflows sont consignées dans le répertoire des journaux NetWorker :
Linux : /nsr/logs/policy/POLICY_NAME
Windows (par défaut) : C:\Program Files\EMC NetWorker\nsr\logs\policy\POLICY_NAME
Les messages généraux du serveur sont consignés dans le daemon.raw :
Linux : /nsr/logs/daemon.raw
Windows (par défaut) : C:\Program Files\EMC NetWorker\nsr\logs\daemon.raw
NetWorker : Utilisation de nsr_render_log pour afficher .raw fichiers journaux
jobsdb période de rétention » (72 heures par défaut). Les journaux dont la période de rétention a été dépassée sont supprimés du système pendant les tâches d’expiration.
Exemples de script :
nsrpolicy d’autres fonctionnalités que l’utilisation d’une seule ligne et la façon dont on peut administrer son serveur NetWorker à partir de la CLI. N’implémentez pas/n’utilisez pas de scripts dans votre environnement sans avoir testé ou compris les fonctions. Le support NetWorker n’offre ni ne fournit aucune solution de rédaction de scripts ni de prise en charge des scripts.
Linux :
Exemple 1 : Répertoriez toutes les règles et leurs workflows. Ce script shell exécute une boucle dans la liste des politiques de la configuration NetWorker et exécute la commande «nsrpolicy workflow list» par rapport à chacune d’elles, de sorte qu’elle génère une liste de noms de workflow pour chaque politique.
#!/usr/bin/sh
IFS=$'\n'
fullpolicylist=(`nsrpolicy policy list`)
for lp in "${fullpolicylist[@]}"
do
echo " "
echo "POLICY: $lp"
echo "Workflows"
nsrpolicy workflow list -p "$lp"
done
Exemple 2 : Répertoriez toutes les politiques, leurs workflows et leurs actions, ainsi que le pool de destination. Ce script shell exécute trois boucles pour obtenir la liste des politiques, des workflows et des actions. Les noms de chaque produit sont générés, ainsi que le paramètre du nœud de stockage de destination de l’action.
#!/usr/bin/env bash
set -euo pipefail
# Read policies into an array (one per line)
mapfile -t fullpolicylist < <(nsrpolicy policy list)
for lp in "${fullpolicylist[@]}"; do
echo "------------------"
echo "POLICY: $lp"
# Read workflows for this policy
mapfile -t wflist < <(nsrpolicy workflow list -p "$lp")
for w in "${wflist[@]}"; do
echo
echo "WORKFLOW: $w"
# Read actions for this workflow
mapfile -t alist < <(nsrpolicy action list -p "$lp" -w "$w")
for a in "${alist[@]}"; do
echo "ACTION: $a"
# Pull DestinationPool value
destpool=$(
nsrpolicy action display -p "$lp" -w "$w" -A "$a" \
| awk -F': ' '/DestinationPool/ {print $2; exit}'
)
echo "Destination Pool: ${destpool:-<none>}"
done
done
done
Windows PowerShell :
Exemple 1 : Liste des workflows. Répertorie les règles et leurs workflows en parcourant la liste des règles et en exécutant la commande « nsrpolicy workflow list » pour chaque règle.
$listp = nsrpolicy policy list
foreach ($i in $listp)
{
write-host "-----"
write-host "POLICY: $i"
write-host "WORKFLOWS: "
nsrpolicy workflow list -p "$i"
}
Exemple 2 : Liste des actions. Trois boucles sont créées. Une boucle pour répertorier les politiques, puis une boucle pour répertorier tous les workflows pour chaque politique, puis une boucle pour répertorier toutes les actions de chaque workflow.
$listp = nsrpolicy policy list
foreach ($p in $listp)
{
write-host "-----"
write-host "POLICY: $p"
write-host "WORKFLOWS: "
$wlist = nsrpolicy workflow list -p $p
foreach ($w in $wlist)
{
write-host "$w"
write-host "ACTIONS:"
$alist = nsrpolicy action list -p "$p" -w "$w"
foreach ($a in $alist)
{
write-host "$a"
}
}
}Informations supplémentaires
La première étape consiste à vous connecter au serveur NetWorker sur la ligne de commande à l’aide de la commande nsrlogin avec les mêmes informations d’identification que celles que vous utilisez pour vous connecter à NetWorker Management Console. Lorsque vous exécutez la commande nsrlogin, l’hôte NetWorker contacte NetWorker AuthenticationService pour valider les informations d’identification de connexion de l’utilisateur.
nsrlogin -u [nom d’utilisateur] - p [mot de passe]
La commande nsrpolicy dispose d’un certain nombre d’options différentes disponibles à chaque niveau. Appuyez sur la touche Entrée à chaque étape pour obtenir la liste complète des options disponibles pour la prochaine partie de votre commande :
nsrpolicy
policy
create | delete | display | update | list
workflow
create | delete | display | update |
list action
create | delete | display | update | list
group
create | delete | display | update
start
Doit avoir : -p [politique] -w [flux de travail]
Autres options (NetWorker 9.2 et versions ultérieures pour l’option -c) : -c { <client_name1 :[save_set_path_1 ; save_set_path_2],client_name2...> -s [serveur NetWorker] -D [niveau de débogage] -h
arrêter
Doit avoir : -j [jobid] ou -p [policy] -w [workflow]
Autres options : -s [serveur NetWorker] -D [niveau de débogage] -h
moniteur
Doit avoir : -p [politique]
Autres options : -w [workflow] -c [client] -g [group] -d [details] -n [non-tabulaire] -j [jobid] -s [NetWorker server] -D [debug level] -h
fichier_
d’entréeDoit avoir : -f [nom du fichier]
Autres options : [--stop_on_error -S <0/1 ; default :0 (Ne pas arrêter)>] [--stop_on_error -S <0/1 ; default :0 (Ne pas arrêter)>] -D [debug level] -h
restart
-j [jobid] ou -p [policy] -w [workflow]
Autres options : -s [serveur NetWorker] -D [niveau de débogage] -h
émigrer
Doit avoir ce qui doit être migré : group | schedule_clone | nas_device | vmware_policy
Other options : -s [serveur NetWorker] -D [niveau de débogage] -h
Aide
EXEMPLES DE LIGNE DE COMMANDE :
Répertorier les règles dans la zone
de donnéesnsrpolicy policy list
nsrpolicy policy list
Afficher les propriétés d’une action :
nsrpolicy action display -p [policy] -w [workflow] -A [action]
nsrpolicy action display -p Mona -w Mona_wf -A backup
Affichez les propriétés d’un groupe :
nsrpolicy group display -g [groupe]
nsrpolicy group display -g Felix
Désactiver une action :
nsrpolicy action update [type d’action sous-type de sauvegarde] -p [politique] -w [workflow] -A [action] -e no
nsrpolicy action update backup traditional -p FrankHoenikker -w FrankH -A backup -e no
Pour modifier le planning associé à une action :
nsrpolicy action update [type d’action sous-type de sauvegarde] -p [politique] -w [workflow] -A [action] -t [planification]
nsrpolicy action update backup traditional -p Mona -w Mona_wf -A backup -t full,incr,incr,incr,incr,incr,incr,incr
Ajoutez un client à un groupe à l’aide d’un fichier d’entrée (l’instance client doit déjà exister) :
Créez un fichier d’entrée avec le texte suivant : group update client -g [group] --add_clnt_list [client] :[saveset]
cat AddAlicetoTheHook.input
group update client -g TheHook --add_clnt_list vm-lego-231 :/alice
nsrpolicy input-file -f « [chemin d’accès au fichier d’entrée] »
nsrpolicy input-file -f « /nsr/AddAlicetoTheHook.input"
Créez un nouveau workflow avec des valeurs autres que celles par défaut pour le commentaire, l’heure de début et le groupe :
nsrpolicy workflow create -p [policy] -w [workflow] -c [comment] -g [group] -S [start time]
nsrpolicy workflow create -p Mona -w Papa -c « Workflow for RedHat 6 clients » -g PapaMgroup -S « 10:00 »
Create a new action with non-default values for the target pool and success threshold
nsrpolicy action create [action type backup subtype] -p [policy] -w [workflow] -A [action] -o [target pool] -u [success threshold]
nsrpolicy action create backup traditional -p Mona -w Papa -A papabackup -o SanLorenzoDDPool -u success
Start a workflow (Notez que vous ne pouvez pas démarrer une action de cette manière. Vous devez démarrer l’ensemble du workflow).
nsrpolicy start -p [policy] -w [workflow]
nsrpolicy start -p Mona -w Mona_wf
Arrêtez un workflow (vous pouvez obtenir l’identifiant de tâche pertinent à l’aide de la commande 'nsrpolicy monitor' - voir ci-dessous) :
nsrpolicy stop -j [jobid]
nsrpolicy stop -j 320819
Démarrer un client dans un workflow :
nsrpolicy start -p [policy] -w [workflow] -c "[client] :[saveset]
nsrpolicy start -p Mona -w Mona_wf -c « vm-wego-231 :/felix »
Surveillez l’exécution la plus récente des workflows d’une règle :
nsrpolicy monitor -p [politique] -dn
nsrpolicy monitor -p Mona -dn
Résultat détaillé d’une tâche récente spécifique :
nsrpolicy monitor -j [ID de tâche]
nsrpolicy monitor -j 290473
Pour démarrer un workflow en mode débogage, nsrpolicy n’est pas aussi efficace que la commande nsrworkflow, car « nsrpolicy start » ne consignera pas la sortie de débogage dans le dossier /nsr/logs/policy que nsrworkflow appliquera au fichier brut.
nsrworkflow -p [policy] -w [workflow] -A « [action] »
nsrworkflow -D9 -p Newt -w newt1 -A « backup"
L’endroit où vous souhaitez placer le débogage dépend de la partie précise du processus de sauvegarde que vous devez examiner plus en détail. La commande nsrworkflow ci-dessus place les opérations NetWorker-server-side savegrp dans D9 et génère les données de débogage dans le fichier brut dans /nsr/logs/policy. Toutefois, il ne transmet pas la balise de débogage au processus de sauvegarde côté client NetWorker. Pour ce faire, vous devez modifier le champ « commande de sauvegarde » du client. Vous pouvez utiliser NMC pour cela, ou à partir de la ligne de commande :
Cela entraînera l’exécution du processus de sauvegarde en mode débogage (D3 dans l’exemple ci-dessous) et la sortie des données du journal de débogage dans le dossier /nsr/logs/policy/[nom de la politique]/[nom du workflow]/ _logs.
NWserver121 :> programme d’administration NetWorker nsradmin
.
Utilisez la commande « help » pour obtenir de l’aide, « visual » pour le mode plein écran.
nsradmin> . type : Client NSR ; Nom : vm-lego-231
Requête
actuelle nsradmin> update backup command : save -D3 backup command : save -D3
;Mettre à jour? y
updated resource id 48.0.46.11.0.0.0.0.0.231.177.13.90.10.60.28.121(13)
backup command : save -D3 ;
Mettre à jour? y
updated resource id 45.0.185.125.0.0.0.0.0.126.197.192.89.10.60.28.121(34)
backup command : save -D3 ;
Mettre à jour? y
updated resource id 47.0.28.24.0.0.0.0.0.123.60.218.88.10.60.28.121(39)
backup command : save -D3 ;
Mettre à jour? y
updated resource id 64.0.28.24.0.0.0.0.0.123.60.218.88.10.60.28.121(35)
backup command : save -D3 ;
Mettre à jour? y
updated resource id 57.0.46.11.0.0.0.0.0.231.177.13.90.10.60.28.121(8)
commande de sauvegarde : save -D3 ;
Mettre à jour? y
updated resource id 49.0.62.11.0.0.0.0.0.118.31.239.89.10.60.28.121(5)
/nsr/logs/policy/Zinka/zinka_wf/zinka_backup_357042_logs
EXEMPLES DE SCRIPT :
Ces scripts sont donnés à titre d’exemples de ce qui peut être scripté avec cette commande. Ils ne doivent pas être implémentés dans un environnement de production sans tests approfondis.
LINUX :
Exemple 1 : Répertorier toutes les règles et leurs workflows
Ce script shell exécute une boucle dans la liste des règles de la configuration NetWorker et exécute la commande « nsrpolicy workflow list » sur chacune d’elles, ce qui génère une liste de noms de workflow pour chaque politique.
cat listofworkflows.sh
# !/usr/bin/sh
IFS=$'\n’fullpolicylist
=('nsrpolicy policy list')
for lp in « ${fullpolicylist[@]}"
do
echo " «
echo « POLICY : $lp"
echo « Workflows"
nsrpolicy workflow list -p « $lp"
done
Example 2 : Répertoriez toutes les règles, leurs workflows et leurs actions, ainsi que le pool
de destinationCe script shell exécute trois boucles pour obtenir la liste des politiques, des workflows et des actions. Les noms de chaque produit sont générés, ainsi que le paramètre du nœud de stockage de destination de l’action.
cat listofworkflows_actions.sh
# !/usr/bin/sh
IFS=$'\n’fullpolicylist
=('nsrpolicy policy list')
for lp in « ${fullpolicylist[@]}"
do
echo « ------------------ «
echo « POLICY : $lp »
wflist=('nsrpolicy workflow list -p $lp')
for w in « ${wflist[@]} »
do
echo " "
echo « WORKFLOW : $w »
alist=('nsrpolicy action list -p $lp -w $w')
for a in « ${alist[@]} »
do
echo « ACTION : $a »
destpool='nsrpolicy action display -p $lp -w $w -A $a | grep DestinationPool | cut -d « : » -f2'
echo "Pool de destination : $destpool"
done
done
done
Exemple 3 Exécution d’une sauvegarde uniquement si un répertoire spécifique existe
Ce script shell vérifie s’il existe un répertoire appelé /k7app. Si c’est le cas, il démarre le workflow appelé newt1 et consigne qu’il l’a fait dans un fichier journal dédié. Si le répertoire n’existe pas, la sauvegarde n’est pas exécutée et ce fait est consigné dans le même fichier log. La même structure de script peut être utilisée pour toutes les circonstances où vous souhaitez qu’un workflow soit exécuté uniquement lorsqu’une condition spécifique est remplie.
# !/usr/bin/sh
IFS=$'\n’dir
="/k7app"
log="/nsr/logs/k7applog.log"
DATE='date’if
[ -d « $dir » ]
then
nsrpolicy start -p Newt -w newt1
printf $DATE >> $log
printf " $dir est présent, donc le démarrage du workflow newt1 \n » >> $log
else
printf $DATE >> $log
printf " $dir n’est pas présent, donc ne démarre pas le workflow newt1 \n »>>$log fi
WINDOWS POWERSHELL :
Exemple 1 : Liste des workflows
Répertorie les règles et leurs workflows en parcourant la liste des règles et en exécutant la commande « nsrpolicy workflow list » pour chaque règle.
$listp = nsrpolicy policy list
foreach ($i dans $listp)
{
write-host « -----«
write-host « POLICY : $i"
write-host « WORKFLOWS : «
nsrpolicy workflow list -p « $i"
}
Example 2 : Liste des actions
Trois boucles sont créées. Une boucle pour répertorier les politiques, puis une boucle pour répertorier tous les workflows pour chaque politique, puis une boucle pour répertorier toutes les actions de chaque workflow.
$listp = nsrpolicy policy list
foreach ($p dans $listp)
{
write-host « -----«
write-host « POLICY : $p"
write-host « WORKFLOWS : «
$wlist = nsrpolicy workflow list -p $p
foreach ($w in $wlist)
{
write-host « $w »
write-host « ACTIONS : »
$alist = nsrpolicy action list -p « $p » -w « $w »
foreach ($a dans $alist)
{
write-host « $a »
}
}
}
Exemple 3 Exécuter une sauvegarde uniquement si un répertoire spécifique existe
Ce script vérifie s’il existe un répertoire appelé C :\basicdata. Si c’est le cas, il démarre le workflow appelé Star et consigne le fait qu’il l’a fait dans un fichier journal dédié. Si le répertoire n’existe pas, la sauvegarde n’est pas exécutée et ce fait est consigné dans le même fichier log. La même structure de script peut être utilisée pour toutes les circonstances où vous souhaitez qu’un workflow soit exécuté uniquement lorsqu’une condition spécifique est remplie.
$dir = « C :\basicdata"
$log = « C :\Program Files\EMC NetWorker\nsr\logs\star.log"
$LogTime = Get-Date -Format « MM-dd-yyyy_hh-mm-ss"
if ( Test-Path « $dir » )
{ nsrpolicy start -p Star -w Workflow1
« ------------------ » | Out-File $log -Append -Force
$LogTime | Out-File $log -Append -Force
« Started Star » | Out-File $log -Append -Force
}
else
{
»------------------ » | Out-File $log -Append -Force
$LogTime | Out-File $log -Append -Force
« L’étoile n’a pas commencé car $dir n’existe pas » | Out-File $log -append -force
}