How to use the command 'qm guest exec' (with examples)
This article provides an overview of different use cases of the ‘qm guest exec’ command, which is used to execute specific commands via a guest agent.
The ‘qm guest exec’ command is particularly useful in virtualization environments where Proxmox Virtual Environment (PVE) is utilized. PVE enables efficient management and deployment of virtual machines (VMs) and containers, and the ‘qm guest exec’ command allows for seamless execution of commands within VMs through the guest agent. This command offers several options to enhance the execution process, such as asynchronous execution, custom timeouts, and input forwarding from STDIN.
Use case 1: Execute a specific command via a guest agent
Code:
qm guest exec vm_id command argument1 argument2 ...
Motivation: This use case is commonly employed when there is a need to execute a specific command within a VM. By utilizing the ‘qm guest exec’ command, administrators can remotely run commands within the guest agent, facilitating tasks such as software installations or configuring specific settings.
Explanation:
- ‘qm guest exec’: This is the command to execute a specific command via a guest agent.
- ‘vm_id’: This is the ID of the virtual machine where the command will be executed.
- ‘command’: This is the command to be executed within the guest agent.
- ‘argument1 argument2 …’: These are optional arguments that can be passed to the command being executed.
Example output: If we want to execute the command ‘apt-get update’ in the VM with ID 100, the command would be:
qm guest exec 100 apt-get update
This would update the package list within the VM, and the output would be the result of the command execution.
Use case 2: Execute a specific command via a guest agent asynchronously
Code:
qm guest exec vm_id argument1 argument2 ... --synchronous 0
Motivation: Asynchronous execution can be beneficial when there is a need to execute time-consuming commands in the background. This allows administrators to perform other tasks without waiting for the command to complete.
Explanation:
- ‘–synchronous’: This option specifies the synchronous execution mode. By default, the value is set to 1, indicating synchronous execution. Setting it to 0 enables asynchronous execution.
- ‘0’: The value 0 represents the asynchronous execution mode.
Example output: To execute the command ‘backup.sh’ asynchronously in the VM with ID 200, the command would be:
qm guest exec 200 backup.sh --synchronous 0
This would initiate the backup process in the VM, and the command prompt would be immediately available for further operations.
Use case 3: Execute a specific command via a guest agent with a specified timeout
Code:
qm guest exec vm_id argument1 argument2... --timeout 10
Motivation: Specifying a timeout is useful when there is a need to restrict the execution time of a command. This ensures that if a command takes longer than the specified timeout period, it is terminated automatically.
Explanation:
- ‘–timeout’: This option sets a specific timeout duration for the command execution.
- ‘10’: This is the timeout value in seconds.
Example output: To execute the command ’long_running_command.sh’ within the VM with ID 300 and specify a timeout of 10 seconds, the command would be:
qm guest exec 300 long_running_command.sh --timeout 10
If the ’long_running_command.sh’ takes more than 10 seconds to execute, the command will be terminated and an appropriate error message will be displayed.
Use case 4: Execute a specific command via a guest agent and forward input from STDIN
Code:
qm guest exec vm_id argument1 argument2 ... --pass-stdin 1
Motivation: Enabling input forwarding from STDIN can be useful when there is a need to interact with commands that require user input. This allows administrators to provide input to the command being executed within the guest agent.
Explanation:
- ‘–pass-stdin’: This option enables the forwarding of input from STDIN to the guest agent.
- ‘1’: The value 1 indicates that input forwarding from STDIN is enabled.
Example output: To execute the command ‘python_script.py’ within the VM with ID 400 and pass user input to the script, the command would be:
qm guest exec 400 python_script.py --pass-stdin 1
This would enable the administrator to provide input to the ‘python_script.py’ script and interact with it, if required.
Conclusion:
The ‘qm guest exec’ command is a powerful tool in Proxmox Virtual Environment, allowing administrators to execute commands within VMs seamlessly. This article covered various use cases of the command, including executing commands via a guest agent, asynchronous execution, timeout specification, and input forwarding from STDIN. Understanding these use cases will enable users to leverage the ‘qm guest exec’ command effectively in virtualization environments.