Author: RunCloud Team

  • How to Kill a Process in Linux From the Command Line

    How to Kill a Process in Linux From the Command Line

    Are you tired of unresponsive programs, resource-hogging applications, or rogue processes slowing your Linux system down? While knowing how to kill a process on Linux from the command line is a fundamental skill for any Linux user, the story doesn’t end with a simple kill command.

    What if you can’t find the process ID (PID)?

    What’s the difference between a “job” and a “process” – and how do you manage them?

    If you’ve ever found yourself searching for answers to these follow-up questions, you’re in the right place. This article will move past the basic ps aux | grep command and discuss more efficient tools like pgrep and pidof to find exactly what you’re looking for.

    We will learn how to manage foreground and background jobs – an essential skill for multitasking in the terminal.

    We’ll also tackle common points of confusion, such as the difference between jobs and processes, and how to find resource-hungry processes without relying on top.

    But before we kill processes, let’s first refresh our knowledge of what processes are!

    What is a Process in Linux?

    In Linux, a process is an instance of a running program. Each process has its own memory space, system resources, and a unique Process ID (PID) that the kernel assigns.

    Processes can be applications, system services, or background tasks essential for the operating system’s functionality.

    Suggested read: Introduction to Bash For Loops: A Beginner’s Guide

    What is Meant by Killing a Process in Linux?

    Killing a process in Linux means terminating or stopping a program forcefully. This action is often necessary when a process becomes unresponsive, consumes too many system resources, or needs to be stopped for maintenance or security reasons.

    Linux provides several methods to kill processes, ranging from graceful termination signals to forceful stops.

    When you kill a process, you’re essentially sending a signal to that process, instructing it to terminate. The most common signal used for this purpose is SIGTERM (signal 15), which allows the process to perform cleanup operations before exiting.

    In cases where a process doesn’t respond to SIGTERM, users can employ stronger signals such as SIGKILL (signal 9), which forces immediate termination without allowing for cleanup.

    Suggested read: How MailHog Can Transform Your Local Email Testing Process

    Reasons to Kill or Terminate a Process on Linux

    There are various scenarios where killing a process becomes necessary:

    • Unresponsive Applications: When a program freezes or becomes unresponsive, terminating it can free up system resources and allow for a restart.
    • Resource Management: Processes consuming excessive CPU or memory can be killed to maintain system stability and performance.
    • Security Concerns: Suspicious or potentially malicious processes should be terminated to prevent security breaches.
    • System Maintenance: During system updates or reconfigurations, certain processes may need to be stopped.
    • Debugging: Developers often need to terminate processes during software testing and debugging.
    • Freeing Up Ports: Killing a process can release network ports that are being held, allowing other applications to use them.
    • Clearing File Locks: Terminating a process can release file locks, enabling access to previously locked files or directories.
    • Stopping Runaway Processes: Accidental infinite loops or other programming errors can create runaway processes that need to be stopped.

    Suggested read: What is Docker and How Does it Work

    How to Find a Process ID in Linux

    Before you can stop a process, you need to find it, but multiple processes with similar names can run simultaneously. In Linux, every process running on your system has a unique Process ID (PID).

    While many users are already familiar with the ps aux | grep command, there are often faster and more precise tools for the job.

    Let’s explore the best ways to locate processes.

    Using the ps command in Linux

    The ps (process status) command gives you a snapshot of the currently running processes. It has many options, but a few combinations are incredibly useful.

    1. ps aux: This is one of the most common commands for tracking processes, as it shows all processes running for all users. You should use ps aux when you need to identify which user owns a process and how much CPU or memory it’s using.

      The ‘aux’ in this case comprises the following three parameters:
      • a = show processes for all users
      • u = display the process’s user/owner
      • x = also shows processes not attached to a terminal

    Example: To find the process ID of the RunCloud agent, you could type:

    ps aux | grep runcloud

    The second column in the output is the PID you need. You’ll notice that the output presented here is quite complex because of the number of columns, and it can be hard to locate what you need.

    Let’s look at some of the better alternatives below, which provide us with the Process ID without any other complex information.

    1. ps -ef: This command is similar to ps aux and shows every process on the system in a different format. You should use this command if you also need to find a process’s Parent Process ID (PPID).
      • -e = select every process
      • -f = display full-format listing

    Example:

    ps -ef | grep runcloud

    This command returns cleaner output; the process ID is in the second column. However, some users might still find it hard to read. Let’s look at some of the better options below, which produce even simpler output in human-readable format.

    1. ps -C <process_name>: In the previous commands, the ps utility returned a very long list of processes, and we used a different tool (grep) to extract only what we needed and discard everything else. This command provides a much cleaner way to find a process by its name without needing grep.
      • -C = select by the command name

    Example:

    ps -C runcloud

    This will list only the processes named “runcloud” with a clean output showing the PID and how long this process has been running. This command displays the information in a presentable format that is easy to read. However, it can still be cumbersome to extract the process ID of a particular process in an automated manner.

    Using the pgrep Command in Linux

    The pgrep (process grep) command is a modern and efficient tool for finding PIDs. It’s faster and less cumbersome than piping ps to grep. If you want to learn more about Linux pipes, we recommend reading our recent blog post on pipes vs xargs.

    1. Basic pgrep: Simply type pgrep followed by the process name.
    pgrep runcloud

    This command will return only the PIDs of the sshd process, nothing more.

    1. pgrep -l: If you want to see the process name alongside the PID, then you can use the -l (list-name) option
    pgrep -l runcloud
    1. pgrep -u <username>: If you need to find all processes run by a specific user, you can use the -u (user) option.
    pgrep -l -u root

    This will list the PID and name of every process owned by the user “root.”

    Using the pidof Command in Linux

    All the commands we discussed have returned some extra information. If you just want to see the process ID and nothing else, you can use the pidof command with the process name. This command is simple, fast, and doesn’t require data processing to extract the necessary information. This makes it extremely easy to integrate into bash scripts.

    Example:

    pidof runcloud

    In the above example, if any process named ‘runcloud’ is running, this command will output its PID.

    Using the top Command to find the Process ID

    The top command provides a real-time, interactive view of your system’s running processes. Just type top to launch it, and you’ll see a constantly updated list of processes, sorted by CPU usage by default. The PID is in the first column, and the command is in the last column. Once you have found what you are looking for, press the ‘q’ key to exit.

    The above example shows that the ‘runcloud’ process has the process ID 670.

    Managing Background and Foreground Tasks in Linux

    When you run a command in your terminal, it typically runs in the foreground. This means it occupies your terminal, and you must wait for it to finish before entering another command. But what if you need to run a time-consuming task and continue using your terminal?

    This can be done using the built-in job control functionality. A job is a wrapper around one or more processes, allowing you to manage them within your current terminal session.

    Sending a Job to the Background in Linux Shell

    You can start a process directly in the background by adding an ampersand (&) at the end of the command.

    Example: Let’s say you’re running a script that takes a long time.

    ./my-long-script.sh &

    The script will start, and the terminal will immediately return you to the command prompt. You’ll see output similar to [1] 12345, where [1] is the job ID and 12345 is the PID.

    The above example shows that the ls command was launched in the background and assigned the PID 241370.

    Viewing and Managing Jobs with jobs

    It is easy to forget once you have sent a job to the background. The jobs command lists all jobs associated with your current terminal session.

    jobs -l

    The -l option also shows the PID, which is very useful.

    The above example shows that the current terminal session has two jobs running in the background.

    Bringing Jobs to the Foreground and Background

    • fg (Foreground): If you need to interact with a background job again, you can bring it to the foreground with the fg command followed by its Job ID.
    fg %1

    This command brings job ID 1 back to the foreground and makes it the active process in your terminal.

    • bg (Background): If you’ve stopped a foreground process (using Ctrl+Z), you can send it to the background to continue running with bg.
    bg %1

    How to Kill a Process in Linux

    There are several ways to kill a process in Linux, but the first step is always to identify the process you want to kill. Once you identify the process, you can choose the following method based on your needs:

    How to Kill a Process Using the kill Command With a PID

    1. Using the kill command: Once you have the PID, you can use the kill command to terminate the process:
    kill PID

    Replace “PID” with the actual number you found. For instance:

    kill 1234
    kill linux process

    This sends a SIGTERM signal, asking the process to shut down gracefully.

    1. Forceful termination: If the process doesn’t respond to the regular kill command, you can use a stronger signal, SIGKILL (9), which forces immediate termination:
    kill -9 PID

    Be cautious with SIGKILL as it doesn’t allow the process to clean up, potentially leading to data loss or corruption.

    How to Kill Multiple Processes

    Sometimes, you need to terminate multiple processes simultaneously. Linux provides efficient ways to do this:

    1. Using kill with multiple PIDs: If you know the PIDs of all processes you want to terminate, you can list them after the kill command:
    kill PID1 PID2 PID3

    For example:

    kill 1234 5678 9101
    kill multiple linux process via command line
    1. Using command substitution: A more dynamic approach is to use command substitution with pgrep. This method kills all processes matching a name:
    kill $(pgrep process_name)

    For instance, to kill all Firefox processes:

    kill $(pgrep firefox)

    This command first uses pgrep to find all PIDs associated with Firefox, then passes these PIDs to the kill command.

    Suggested read: Everything You Need To Know About wp-config.php File

    How to Kill a Process Using the pkill Command

    The pkill command simplifies process termination by allowing you to kill processes based on their names rather than PIDs:

    1. Basic usage: To kill a process by name, simply type: pkill process_name
      This will terminate all processes with “process_name” in their names.
    2. Case-insensitive matching: If you need clarification on the exact capitalization of the process name, use the -i option. For instance: pkill -i firefox will match “Firefox”, “firefox”, or any other case variation.

    How to Kill a Process Using the killall Command

    The killall command is similar to pkill but requires an exact match of the process name:

    1. Basic usage: To kill all processes with an exact name match: killall process_name
    2. Forceful termination: For stubborn processes use the -9 option (equivalent to SIGKILL): killall -9 process_name

    Suggested read: Mastering the Echo Command in Linux (with Practical Examples)

    How to Kill Process in Linux by User

    Sometimes, you need to terminate all processes owned by a specific user:

    1. Listing user processes: First, you can list all processes for a user: ps -u username
      Replace “username” with the actual username.
    1. Killing user processes: To kill all processes for a user, use pkill with the -u option:
      pkill -u username. For example: pkill -u john
    1. Using killall for user processes: Alternatively, you can use the killall command to kill a particular user’s processes, as shown below.
    killall -u username

    Suggested read: What are Linux Logs? What Are They & How To Use Them

    How to Kill a Process in Linux by Name

    Killing processes by name is often more convenient than using PIDs. There are several ways to do this:

    1. Using pkill: The simplest method is by running the following command:
      pkill process_name. Don’t forget to replace process_name with the name of the process you are trying to kill.
    1. Partial name matching: Use the -f option to match a substring in the process name for more flexible matching. This is useful for processes with long or complex names. The syntax of this command is as follows:
    pkill -f "partial_process_name"

    For example, pkill -f "firefox" would match any process with “firefox” anywhere in its command line.

    How to Kill a Process in Linux with Bash Script

    Creating a bash script for process termination can be helpful for repetitive tasks. Follow the steps below to avoid typing the long and complex commands:

    1. Create the script: Use a text editor to create a file named kill_process.sh. For example, you can use the nano editor to create the file using the following command:
      nano kill_process.sh.
    2. Add the script content: After creating the file, paste the following content into it:
    #!/bin/bash
    process_name=$1
    pid=$(pgrep -f "$process_name")
    if [ -z "$pid" ]; then
        echo "Process not found."
    else
        kill $pid
        echo "Process $process_name (PID: $pid) killed."
    fi

    Once you add the content, you can save it and exit it from the file editor. This script takes a process name as an argument, finds its PID, and terminates it.

    Before you can execute the script, you need to make it executable. Change the file permissions by executing the following command to make it executable:

    chmod +x kill_process.sh

    After changing the file permissions, you can run the script by simply typing its name in the command line, followed by the name of the process you want to kill. For example:

    ./kill_process.sh firefox

    The above command will attempt to kill a process named “firefox” on your computer.

    Linux Process Management: At a Glance

    This table provides a quick reference for common commands used to manage processes directly from the command line.

    Action / GoalBash Command ExampleWhen to Use It
    Kill a process by its PIDkill 1234The standard way to terminate a process when you know its exact PID. This sends a graceful shutdown signal (SIGTERM).
    Force-kill a process by PIDkill -9 1234A last resort to forcibly terminate a non-responsive process. This sends a SIGKILL signal that cannot be ignored.
    Kill multiple specific processeskill 1234 5678When you have a specific list of PIDs, you need to terminate all at once.
    Kill a process by partial namepkill 'node'To conveniently kill a process that matches a name or pattern, without needing to find the PID first.
    Kill all processes with an exact namekillall 'firefox'To terminate all instances of a specific program (e.g., all open Firefox windows). It’s safer than pkill if other processes have similar names.
    Kill all processes owned by a userpkill -u 'Alex'To terminate all processes running under a specific user account, often for administrative or security reasons.

    Wrapping Up

    In this post, we’ve explored various methods for killing processes in Linux from the command line. From using the kill command with a process ID to tools such as pkill and killall, you should now understand how to terminate unwanted or misbehaving processes on your Linux system.

    While a good understanding of the Linux command line helps manage your website, it is not a requirement.

    With the help of a hosting platform like RunCloud, you can easily manage your Linux server without getting bogged down in the technical details.

    RunCloud provides a user-friendly interface that simplifies server management, allowing you to focus on building and growing your online presence.

    Whether you’re a seasoned Linux user or just getting started, RunCloud makes it easy to deploy, monitor, and handle mundane tasks like performing regular backups.

    Ready to take your website to the next level? Sign up for RunCloud today and let us handle the Linux management so you can spend more time on what matters most – your business.

    FAQs on Killing Linux Processes

    How do you kill unnecessary processes in Linux?

    To kill unnecessary processes in Linux, you can use commands such as kill, pkill, or killall to terminate the unwanted processes based on their process ID (PID) or name.

    What command can you use to kill a process?

    The kill -9 PID command, which sends the SIGKILL signal, can be used to forcefully terminate a process that is not responding to a regular termination signal.

    How do you find the killed process in Linux?

    To find a killed process in Linux, you can use the ps command to list all running processes or the pgrep command to search for processes by name.

    How do I gracefully shut down a process in Linux?

    To gracefully shut down a process in Linux, you can use the kill command without any signal options, which will send the SIGTERM signal and allow the process to perform cleanup operations before exiting.

    How do you end a process by keystroke?

    In Linux, you can use the Ctrl+C keyboard shortcut to interrupt and terminate the currently running foreground process.

    How do you abort a run in Linux?

    To abort a running process in Linux, you can use the Ctrl+C keyboard shortcut. This will send the SIGINT signal and interrupt the process’s execution.

    Which key is used to cancel a process?

    The Ctrl+C keyboard shortcut is commonly used to cancel or interrupt the currently running process in Linux.

    How do I kill a high CPU process in Linux?

    In Linux, you can use the top command to identify a process that consumes a large amount of CPU resources and then use the kill command to terminate it.

    What’s the difference between a “job” and a “process” in Linux

    A process is any program that is currently running on the operating system. The Linux kernel manages all processes.
    A job is a shell-level concept that manages one or more processes within a single terminal session. Think of it as a label for a task you’re running. You can move a job to the background or foreground, but the kernel still manages it as a process.

    How can I see processes in a tree-like view?

    It’s useful to see which processes were started by other processes (parent-child relationships). The pstree command is perfect for this, as it gives you a visual map of everything running on your system, which can be very helpful for troubleshooting.

  • How to Fix Error Establishing a Database Connection in WordPress [SOLVED]

    How to Fix Error Establishing a Database Connection in WordPress [SOLVED]

    Few WordPress errors are as frustrating as seeing the message “Error Establishing a Database Connection.” It instantly takes your site offline, blocks both visitors and admins, and can cause serious downtime if not resolved quickly.

    This error occurs when WordPress cannot connect to your MySQL database, where all your posts, pages, and settings are stored. Without that connection, WordPress has nothing to display.

    The good news is that this issue is common and almost always fixable.

    In this guide, we’ll walk through exactly how to fix the error establishing a database connection in WordPress, step by step. From checking your wp-config.php file to repairing corrupted tables and optimizing your server, you’ll learn the proven fixes that quickly get your site back online.

    Let’s get started!

    What Causes ‘Error Establishing a Database Connection’ in WordPress?

    Before we dive into the fix, it’s helpful to understand what triggers this error.:

    • Incorrect Database Credentials: This is the most common reason for this error. The wp-config.php file contains the database name, username, password, and host. If any of these are wrong, the connection will be refused.
    • Corrupted WordPress Database: Your database can become corrupted due to a faulty plugin update, a theme installation gone wrong, or a server glitch.
    • Corrupted WordPress Core Files: Although less common for this specific error, a damaged core file related to the database functions can cause the connection to fail.
    • Unresponsive Database Server: The server where your database is hosted might be down, overloaded, or experiencing technical issues. This is a problem on your hosting provider’s end.
    • Sudden Traffic Spikes: A massive surge in traffic can overwhelm your hosting server and temporarily make the database unresponsive to new connection requests.

    Suggested Read: How to Create a Database for Your Web Application | RunCloud Docs

    Step-by-Step Checklist to Fix ‘Error Establishing a Database Connection‘

    Follow these steps in order, as they are arranged from the most common and easiest fix to the least common.

    1. Back Up WordPress Website Before Troubleshooting

    Before making any changes, always create a full backup of your website. This protects your files and database if something goes wrong. RunCloud users can do this in one click from the dashboard.

    If you’re not using RunCloud, you can:

    • Use your hosting control panel (cPanel, Plesk, etc.) to generate and download a backup.
    • Download your WordPress files via FTP and export your database through phpMyAdmin.

    Skipping this step risks turning a small fix into a much bigger problem.

    Suggested Read: How to Connect a MySQL Database to PHP (A Developer’s Guide)

    2. Check and Update wp-config.php Database Credentials

    Incorrect credentials are the most common cause of this error. To check and fix them:

    1. Connect to your site using FTP or your host’s File Manager. Open the wp-config.php file in the root WordPress folder. RunCloud users can edit this file directly from the dashboard.

    Look for these lines of code:

    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define( 'DB_NAME', 'your_database_name' );
    /** MySQL database username */
    define( 'DB_USER', 'your_username' );
    /** MySQL database password */
    define( 'DB_PASSWORD', 'your_password' );
    /** MySQL hostname */
    define( 'DB_HOST', 'localhost' );
    1. Find your database details in your hosting control panel (often under “MySQL Databases”).
    2. Make sure the DB_NAME, DB_USER, DB_PASSWORD, and DB_HOST values match exactly. Note: most hosts use “localhost” for DB_HOST, but some require a specific server name or IP.
    3. If anything doesn’t match, update wp-config.php, save the file, and reload your site.

    Suggested Read: SQLite vs MySQL vs PostgreSQL (Detailed Comparison)

    3. Repair WordPress Database via phpMyAdmin or WP-CLI

    If your database tables are corrupted, WordPress cannot read them. Luckily, WordPress includes a built-in repair tool. This process fixes errors without deleting your data.

    1. Open your wp-config.php file.

    Add this line just above /* That's all, stop editing! Happy publishing. */:

    define('WP_ALLOW_REPAIR', true);
    1. Save the file, then go to: http://runcloud-demo.com/wp-admin/maint/repair.php.
    2. On that page, click “Repair Database.”
    Fix the error establishing a database connection
    1. When it finishes, delete the line you added in wp-config.php. Leaving it in place is a security risk.

    Suggested Read: How to Install phpMyAdmin Easily Using RunCloud

    4. Reset or Update WordPress Database User and Password

    Sometimes the database user loses permissions even if the credentials are correct. To fix this:

    1. Open the “MySQL Databases” section in your hosting control panel. RunCloud users can do this directly from the dashboard.
    1. Locate the database user for your WordPress site.
    2. Reset the password or create a new user with a strong password.
    1. Make sure this user has full privileges for your WordPress database. In RunCloud, use the “Assign and Revoke Users” option to manage this.
    1. Update the new password in your wp-config.php file under DB_PASSWORD.

    Suggested Read: How to Identify and Kill Queries with the MySQL Command-Line Tool

    5. Reinstall or Replace Corrupted WordPress Core Files

    If a WordPress core file is corrupted, replacing it with a clean copy usually fixes the issue. Don’t worry – this won’t affect your themes, plugins, or content.

    1. Download the latest version of WordPress from WordPress.org.
    2. Unzip the file on your computer.
    3. Delete the wp-content folder and wp-config-sample.php file from the unzipped package.
    4. Connect to your site via FTP and upload the remaining files, overwriting the old ones.
    5. This refreshes all core files with clean copies without touching your content.

    Suggested Read: How to Migrate Your Server with (Near) Zero Downtime

    6. Check Hosting Server Health and MySQL Service

    If the error persists, the problem may be with your hosting server rather than WordPress.

    • Check Server Status: Most hosting providers publish updates about outages or maintenance. RunCloud does not provide server status updates, so check directly with your cloud provider (e.g., AWS, Vultr, DigitalOcean).
    • Test Other Sites: If you host multiple sites on the same account, check if they are also down. If they are, it’s likely a server-wide issue.
    • Contact Support: Open a ticket with your provider. Tell them you’re seeing an “Error Establishing a Database Connection” and that you’ve already confirmed your wp-config.php credentials. Ask them to confirm that the MySQL service is running.

    7. Optimize WordPress Database and Enable Caching

    If the error followed a sudden traffic spike, it may disappear once traffic drops. But this is a clear sign your site needs optimization.

    With RunCloud, you can enable NGINX FastCGI caching in one click, or add Redis or Memcached directly from the dashboard. This helps your site handle heavy database loads without needing command-line tools. For detailed guides, see:

    Advanced Troubleshooting for WordPress Database Connection Errors

    If you’ve worked through the standard checklist and are still facing the error, it’s time to investigate deeper server-level configurations and resource limitations. These advanced steps address less common but critical issues that often require more direct control over your hosting environment.

    1. Update DB_HOST in wp-config.php

    Most setups use localhost for DB_HOST, but some hosts run the database on a separate server. In those cases, you’ll need to replace localhost with the hostname or IP address your provider gives you (e.g., mysql.yourhost.com).

    2. Increase PHP memory

    Sometimes the error appears because PHP runs out of memory while processing a heavy query. To increase it, add this line to wp-config.php:

    define('WP_MEMORY_LIMIT', '256M');

    However, server-level settings can sometimes override this change. Manually editing the php.ini file via SSH is the most reliable method, but it can be intimidating for many users.

    RunCloud gives you direct, graphical control over your server’s PHP settings. From your web application’s dashboard, you can select a new memory_limit via a text box and other critical values like max_execution_time and upload_max_filesize. This removes the risk of syntax errors in configuration files and instantly applies the changes only to the selected application.

    3. Consider migrating to better hosting

    If you see this error often, the problem may be your hosting provider. Shared hosting, in particular, is prone to overloaded databases. Moving to a VPS (DigitalOcean, Vultr, AWS, etc.) provides more stability.

    The migration process can be daunting. It involves server provisioning, software installation (NGINX, PHP, MySQL), security configurations, and moving your site’s files and database.

    RunCloud is designed to make this transition seamless. You can connect it to any VPS provider, and it will automatically provision, optimize, and secure the server with a modern server stack in minutes. This makes managing and deploying a WordPress website and any web application easy.

    Wrapping Up: Preventing Database Connection Errors in WordPress

    Fixing the “Error Establishing a Database Connection” is one thing – making sure it doesn’t happen again is even more important. Regular backups, reliable hosting, proper caching, and a clean server setup reduce the chances of future downtime.

    That’s where RunCloud helps. Instead of juggling FTP clients, php.ini edits, and command-line fixes, you get a simple dashboard to manage everything – from database users to PHP settings and caching – in just a few clicks.

    If you want fewer headaches, faster performance, and a WordPress site that stays online even under heavy load, RunCloud is built for you.

    Take control of your server – start with RunCloud today and eliminate database errors for good.

    FAQs on ‘Error Establishing a Database Connection’ in WordPress

    Why is my WordPress site not connecting to the database?

    Your site cannot connect because the PHP code is blocked from accessing the MySQL database where your content is stored. This is most often due to incorrect database credentials in your wp-config.php file. 

    How do I fix database errors in cPanel?

    In cPanel, you can fix this by using the “MySQL Databases” tool to check the database username and reset its password. Then, you can use the integrated phpMyAdmin tool to select your database and run the “Repair table” command on any corrupted tables. Platforms like RunCloud offer a more modern interface for these tasks, making user management and phpMyAdmin access much quicker.

    What causes database issues on localhost XAMPP?

    MySQL is usually not running. Open the XAMPP control panel and check that the MySQL module is started (green status). Also, confirm that your wp-config.php settings match the XAMPP defaults – DB_USER is root, and DB_PASSWORD is blank.

    How do I repair a corrupted WordPress database?

    Add the define(‘WP_ALLOW_REPAIR’, true); line to your wp-config.php file to activate WordPress’s built-in database repair script. Alternatively, you can use phpMyAdmin to select all your database tables and choose the “Repair table” option. Server management panels like RunCloud provide one-click access to phpMyAdmin, simplifying the process of performing these database repairs.

    Why is my database error only happening on my iPhone?

    This is almost always a caching problem; your iPhone is likely viewing an old, cached version of the error page that no longer exists. Clear your mobile browser’s cache or purge your site’s caching plugin to resolve it. If you use server-level caching, a tool like RunCloud allows you to easily manage and purge the NGINX FastCGI cache directly from your dashboard.

    How can I check the MySQL server status in WordPress hosting?

    You’ll need to contact support on most shared hosting to confirm the MySQL server is operational. However, you can manage this using a VPS through a server panel. RunCloud provides a real-time server health monitoring dashboard that displays the status of essential services like MySQL, NGINX, and Redis.

    What should I do if database errors appear intermittently?

    Intermittent errors suggest your database server is temporarily overloaded, often due to high traffic spikes or slow database queries from a plugin. This is a resource issue, and you should enable an object caching solution to reduce the database load. With RunCloud’s server health monitoring, you can watch for spikes in CPU and memory usage to diagnose when your server is under strain.

  • How to Find Most Used Disk Space Directories and Files in Linux

    How to Find Most Used Disk Space Directories and Files in Linux

    On Linux, disk space can disappear fast. This guide shows you how to spot the biggest files and directories quickly, understand size mismatches, and free up space safely.

    How Do You Check Disk Usage With Built-In Linux Tools?

    In Linux Bash, you have several built-in utilities and commands that you can use to check and monitor disk usage. These utilities are readily available and don’t require any additional installations.

    Here are some of the commonly used built-in utilities for checking disk usage in Linux:

    How Do You Find Large Files in Linux?

    Most Linux systems include the du tool. Use it to see which files and folders use the most space.

    To find the top 10 largest files from the current directory, run the following command in your Linux terminal:

    du . | sort -nr | head -n10
    Disk space in linux

    This command utilizes the du command to display disk usage, sort to sort the results in descending order, and head to display the top 10 largest files.

    How Do You Check the Largest Directories in Linux?

    Sometimes thousands of small files fill a disk faster than a few large ones. To list the largest directories in the current directory, you can run the following command in your terminal:

    du -s * | sort -nr | head -n10
    bask disk usage

    This command summarizes directory sizes, sorts them, and shows the top 10 largest directories in the current working directory.

    How Do You Find Large Files With GNU Tools in Linux?

    You can also use clever bash scripting with the find command to list the biggest files and directories.

    Method 1 – Identify Large Files With find

    The following command can be used to find and list files larger than 20,000 kilobytes (20 megabytes) in the user’s home directory (~). It then sorts these files by size in reverse order and displays the file names along with their respective sizes:

    find ~ -type f -size +20000k -exec ls -lh {} \; 2> /dev/null   | awk '{ print $NF ": " $5 }'  | sort -hrk 2,2

    Here’s a step-by-step explanation of how this command works:

    1. find ~ -type f -size +20000k: This part of the command initiates the search for files in the home directory (~). If you want to use a different directory, replace ~ with the path of your directory. The -type f option specifies that we are looking for regular files, and the -size +20000k option filters files larger than 20,000 kilobytes.
    2. -exec ls -lh {} \;: For each file that matches the criteria, the find command executes the ls -lh command, which lists detailed information about the file. The {} placeholder is replaced with the current file’s name during execution.
    3. 2> /dev/null: This part redirects any error messages (specifically, standard error) to /dev/null, effectively suppressing them. This is done to prevent error messages from being displayed in the terminal.
    4. | awk '{ print $NF ": " $5 }': The awk command processes the output from the previous command. It extracts the file name (represented as $NF) and the file size (represented as $5) and prints them in the format “filename: size”.
    5. | sort -hrk 2,2: The final part of the command uses sort to arrange the file entries. The options used are as follows:
      1. -h: This tells sort to perform a human-readable sort, which is useful for sizes with suffixes like “K” or “M”.
      2. -r: This specifies a reverse order sort, listing the largest files first.
      3. -k 2,2: This instructs sort to use the second field (the size) as the key for sorting.

    Method 2 – List the Biggest Files in Size Order

    Alternatively, you can use the following command to find and display information about the top 20 largest regular files in the user’s home directory (~). It reports the size of each file and its path, sorted in reverse order by size.

    find ~ -type f -printf '%b %p\0' | sort -rzn | head -zn 20 | tr '\0' '\n'

    Here’s a step-by-step explanation of how this command works:

    1. find ~ -type f -printf '%b %p\0': This part of the command initiates a search for regular files (-type f) in the home directory (~). For each file found, it uses the -printf option to format the output as follows:
      1. %b: Represents the number of 512-byte blocks allocated for the file.
      2. %p: Represents the file’s path.
      3. \0: Terminates each output entry with a null character (\0). The null character is used to separate file entries, and is especially important when dealing with file paths that contain spaces or special characters.
    2. | sort -rzn: The output from the find command is then piped (|) to the sort command for sorting. The following options are used with sort:
      1. -r: Performs a reverse order sort, arranging the entries from largest to smallest.
      2. -z: Informs sort that the input entries are null-terminated, which is why the null character (\0) was added at the end of each entry by the find command.
      3. -n: Specifies a numerical sort, ensuring that file sizes are sorted based on their numeric values rather than lexicographically.
    3. | head -zn 20: After the sorted list is generated by sort, the output is piped to the head command.
      1. -z: Informs head that the input entries are null-terminated.
      2. -n 20: Limits the output to the first 20 entries, which are the 20 largest files based on size.
    4. | tr '\0' '\n': Finally, the tr (translate) command is used to replace the null characters (\0) in the output with newline characters (\n). This is done to format the output in a more human-readable way, with each file and its size on a separate line.

    Note: You can also use the above bash script in conjunction with other bash commands such as numfmt to convert file sizes into human-readable formats. For example, you can do something like this:

    find ~ -type f -printf '%b %p\0' | sort -rzn | head -zn 20 | numfmt -z --from-unit=512 --to=iec | tr '\0' '\n'

    How Do You Check Directory Usage in Linux?

    To check how much storage memory each directory occupies, use the following commands:

    cd /
    du -sh * | grep G

    The above command shows memory usage by directories that occupy a volume measured in Gigabytes. It helps you decide which directories or files you may want to consider for deletion or optimization.

    Best Third-Party Tools for Disk Usage on Linux

    In addition to built-in utilities, there are many third party tools that you can use to assess disk usage in Linux Bash.

    How to Use iotop to Inspect Disk I/O

    iotop shows which processes are reading and writing to disk right now. It helps you spot I/O bottlenecks and noisy neighbours.

    Installation: You can use the apt package manager to install iotop-c:

    sudo apt update
    sudo apt install iotop-c

    Usage: After installation, you can run iotop to monitor and assess disk I/O usage. The -o option sorts the output by disk read or write, and -P displays paths. The -a option shows accumulated values, which can be useful for identifying processes with high disk I/O over time.

    Here’s an example of how to run iotop:

    iotop -oPa

    How to Use gdu to Scan Disk Usage

    gdu is a fast, terminal-based disk usage analyzer. Use it to scan a path and navigate heavy folders.

    Installation: You can download the binary from its GitHub repository and follow the installation steps in the official repository. For Debian/Ubuntu systems, you can run the following command to install the gdu utility:

    apt install gdu

    Usage: To analyze disk usage, run gdu with the desired directory as an argument. Use arrow keys on your keyboard to navigate different folders.

    How to Use dua for Disk Usage

    dua helps you assess disk usage quickly and offers an interactive mode for safe cleanup.The dua command features an interactive mode in which you can explore your file system and choose to delete files and directories to free up disk space. It is designed to minimize the risk of accidental deletions by using a multi-stage process, making it safe for exploration.

    Installation: Dua can be installed by using the binary release for your specific system from the Dua repository.

    Usage:

    • Run dua to count the space used in the current working directory.
    • Execute dua * to count the space used in all directories that are not hidden.
    • To learn about additional functionality such as the aggregate feature, use the dua aggregate --help command.
    • To launch into interactive mode, run dua i

    How to Use godu to Analyse Disk Usage

    godu identifies space-hungry files and directories with an interactive view.

    Installation: godu is another Go-based disk usage tool. You can download the binary from its GitHub repository, make it executable, and move it to a directory in your PATH.

    Usage: Run godu to analyze disk usage for a specific directory. Use the arrow keys on the keyboard to navigate through the file system.

    How to Use ncdu to Explore Disk Usage

    ncdu is a terminal disk usage explorer. It scans quickly and lets you drill down and delete from the same screen.

    Installation: ncdu is an interactive disk usage analyzer that is available to most package managers. You can install it using apt on Debian-based systems:

    sudo apt update
    sudo apt install ncdu

    Usage: Run ncdu to analyze disk usage in an interactive text-based interface:

    These tools provide various ways to assess disk usage, and you can choose the one that best suits your needs and preferences. Some offer graphical interfaces, while others provide command-line-based analyses.

    Why Do ls and du Show Different Sizes?

    ls -l and du report different things, so sizes can look mismatched. Here’s what each one shows:

    Apparent Size

    This is the number of bytes that an application would read if it went from the beginning of the file to the end. It’s the “logical” size of the file. This is the value you see in the output of ls -l.

    Actual Disk Usage (Blocks)

    This is the amount of physical space the file actually occupies on the disk. Filesystems allocate space in fixed-size chunks called blocks (e.g., 4 Kilobytes). Even a file containing a single character will consume one full 4KB block. The du and quota commands report on this actual block usage.

    This difference is most dramatically illustrated with sparse files. A sparse file is a file with “holes” where data has never been written. The filesystem is smart and does not allocate any physical disk blocks for these empty holes.

    Compare Apparent vs. Actual Size on the CLI

    Let’s create a 1 Gigabyte sparse file using the following command.

    # Create a 1GB file instantly without writing any data to it
    truncate -s 1G /tmp/sparse-file.img

    Now, let’s measure it in two different ways:

    Check the Apparent Size with ls:

    ls -lh /tmp/sparse-file.img

    The ls command reads the file’s metadata and reports its logical size: a full Gigabyte.

    Check the Actual Disk Usage with du:

    du -h /tmp/sparse-file.img

    The du command inspects the blocks allocated by the filesystem and reports that it is using zero blocks of physical disk space.

    This is an extreme example, but it perfectly illustrates that a file can appear to be very large while consuming very little of your quota. This is used heavily in virtual machine disk images, database files, and other applications that pre-allocate large files.

    How Do You Find Deleted but Open Files With lsof?

    In Linux, when you delete a file with rm, you are only removing its name from the directory. The actual data on the disk is not freed until every process that has the file open finally closes it. This is the most likely cause of the large discrepancy in your case.

    • The du utility can’t see the file because its name is gone from the directory tree.
    • However, its data blocks are still allocated to your user ID.

    The lsof (List Open Files) command is the perfect tool for finding these “phantom” files.

    How to Use lsof to Locate Deleted Files

    To find deleted files that are still open, use lsof with the link-count filter. The output is noisy, so filter by your user.

    # The +L1 flag filters for files with a link count less than 1 (i.e., deleted)
    # The grep command filters this system-wide list to only show your files
    lsof +L1 | grep 'runcloud'

    Replace runcloud with your actual username before running the above command.

    In the above example, we can clearly see that some files are still being identified by the lsof command even though they have been deleted and can not be accessed using the ls command.

    How to Free Space From Deleted Files in Linux

    If a deleted file is still open, stop the process holding it to release the space. Before you terminate the process, make sure you understand why it’s open.

    kill <process ID>

    After you run the kill command, the operating system will clean up the process, close the open file descriptor, and the filesystem will finally be able to free the data blocks.

    Linux Disk Usage Tools – At a Glance

    Tool Name CLI Command to RunWhat it Displays
    Disk Freedf -hOverall usage and free space for all mounted filesystems.
    Disk Usagedu -sh *Summarized disk usage for each file and directory in the current location.
    Find Command (for large files)find . -type f -size +1GA list of all files larger than a specified size (e.g., 1 Gigabyte).
    Find and Sort Pipelinefind . -type f -exec du -h {} + | sort -rhA sorted list of all files by size, from largest to smallest.
    NCurses Disk UsagencduA very popular, interactive text-based analyzer to explore disk usage.
    Go Disk Usage (gdu)gduA fast, modern, and interactive disk usage analyzer.
    Disk Usage Analyzer (dua)dua interactive .An interactive tool to view disk usage and delete files from its interface.
    Go Disk Usage (godu)goduAn interactive disk usage tool that can display a treemap in the terminal.
    I/O Topsudo iotopReal-time disk read/write activity shows which processes are using the disk now.

    Key Takeaways

    You now know several ways to find which files and directories are using the most space in Linux — from built-in commands like du and find to interactive tools like ncdu and gdu. These methods help you act fast when disk space runs low, prevent downtime, and keep your systems healthy.

    But constantly logging in and running these commands isn’t always practical. That’s where RunCloud helps.

    With RunCloud, you get:

    • A clear dashboard showing disk usage, CPU, and memory in real time
    • Alerts before space runs out, so you can act early
    • A secure, browser-based file manager to clean up files without needing command-line access

    By combining Linux’s flexibility with RunCloud’s visibility, you can keep your servers lean and reliable.

    Start with RunCloud today and make disk management effortless.

  • How to Flush DNS Cache on Windows, Mac, and Linux

    How to Flush DNS Cache on Windows, Mac, and Linux

    DNS cache can speed up internet access and improve browsing experiences by storing recent domain name lookups and their corresponding IP addresses.

    Clearing this cache periodically can enhance your browsing speed and resolve connectivity issues.

    Modern operating systems generally cache DNS lookup results and IP addresses to process requests more quickly. Whenever you write a URL in your browser, it sends a request to the DNS servers to “locate” the site. But instead of sending that request every single time, the browser often caches the information. This way, the next time you type in that address, the browser looks it up through the DNS cache, allowing it to return the results much faster.

    However, cached DNS records can become outdated or corrupted over time, potentially leading to browsing issues, including connection errors or the display of outdated website versions. Flushing your DNS cache occasionally is a good practice to ensure you’re accessing up-to-date versions of websites and protecting yourself from security risks like DNS spoofing.

    In this article we will explain how to flush the DNS cache on different operating systems, including Windows, macOS, and Linux, as well as detailing the several reasons why it is so important to flush the DNS regularly.

    How to Flush DNS Cache on Different Operating Systems

    How to Flush DNS Cache on Windows 10 & 11

    If you’re using Windows 10 or 11, here are the steps you can follow to flush the DNS cache:

    1. Click on Start, then search for Command Prompt. Right-click it and select “Run as Administrator.”
    2. Once the Command Prompt is open, type ipconfig /flushdns and press Enter.
    3. A message will appear confirming that the DNS Resolver Cache was flushed.
    Flush dns cache in Windows computer

    In addition to flushing the DNS, performing an IP release and renewal can help resolve network connection problems. Here’s how to do it:

    How to Perform an IP Release, Renew, and DNS Flush on Windows

    1. Open Command Prompt with administrative privileges.
    2. Type ipconfig /release and press Enter to release the current IP address.
    3. Next, type ipconfig /renew to obtain a new IP address.
    4. Finally, type ipconfig /flushdns to clear the DNS cache.

    How to Flush DNS Cache on macOS

    Flushing the DNS cache on macOS involves using the Terminal app. Follow these steps:

    1. Press cmd + space to open Spotlight Search.
    2. Type Terminal and open the application (you can also find it in the Other section in the Launchpad).
    3. Type the following command: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder.
    4. Enter your administrator password when prompted. Once you do, you will receive confirmation that the DNS cache has been flushed.

    Note: The command can vary depending on your macOS version. Here’s how to check your macOS version:

    1. Click on the Apple menu in the upper-left corner of your screen.
    2. Select About This Mac.

    Depending on your macOS version, use the appropriate command:

    • Monterey, Big Sur, Catalina: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
    • Mojave, High Sierra, Sierra, El Capitan, Mavericks, Mountain Lion, Lion: sudo killall -HUP mDNSResponder

    How to Flush DNS Cache on Linux

    If you’re using a Linux distro such as Ubuntu, here’s how to flush the DNS cache:

    1. Open the terminal by pressing Ctrl + Alt + T or searching for “Terminal” in the Activities menu.
    2. Run the following command:
      • If you are running Ubuntu 20.04 LTS or older, use: sudo systemd-resolve --flush-caches.
      • If you are running Ubuntu 22.04 LTS or newer, use: sudo resolvectl flush-caches.
    3. Enter your administrator password when prompted, and the DNS cache will be flushed.
    Flush DNS cache Linux

    How to Flush DNS Cache in Google Chrome

    If you experience issues accessing websites on Google Chrome, your browser’s DNS cache may also need to be flushed. Here’s how to do it:

    1. Type chrome://net-internals/#dns in the address bar and press Enter.
    2. Click the Clear Host Cache button to flush the browser’s DNS cache.
    Flush DNS cache in Windows

    This action will ensure that Chrome fetches fresh DNS data from the websites you visit.

    Why Should You Flush Your DNS Cache?

    There are several reasons why flushing the DNS cache periodically is important:

    Resolve DNS Errors

    If you’re encountering issues such as DNS_PROBE_FINISHED_NXDOMAIN or CONNECTION_TIMED_OUT, flushing the DNS cache may help resolve the problem. These errors often arise due to outdated or incorrect DNS information.

    Speed Up DNS Propagation

    After making changes to your DNS records, such as transferring a domain to a new hosting provider, DNS propagation can take time to fully update across the internet. Flushing your DNS cache ensures that your device picks up these changes more quickly, allowing you to see the updates sooner.

    Prevent DNS Spoofing

    DNS spoofing (or poisoning) occurs when an attacker manipulates DNS cache entries to redirect users to fraudulent or malicious websites. Flushing your DNS cache helps mitigate this risk by clearing any potentially corrupted entries.

    Avoiding 404 Errors

    A 404 error might indicate that your system is pulling up an outdated version of a website. Flushing the DNS cache ensures that your browser accesses the most current version of the site, which can help you avoid such errors.

    Remove Old DNS Data

    When you change DNS providers, such as switching to Google DNS or OpenDNS, it’s important to flush your DNS cache. This ensures that your system doesn’t use outdated data from the previous provider, helping to prevent connectivity issues.

    After Action Report – Flush Your DNS Cache Periodically

    Flushing your DNS cache is a simple yet effective way to resolve connectivity issues, speed up website access, and prevent security risks like DNS spoofing. Whether you’re using Windows, macOS, Linux, or even just browsing on Google Chrome, clearing your DNS cache periodically is a good habit to ensure optimal performance.

    Do you regularly flush your DNS cache? Let us know if you have any tips or questions! Join the conversation below by leaving a comment! 💬

    Wrapping Up

    RunCloud is a powerful and easy-to-use platform that helps you manage your websites on any cloud server. With RunCloud, you don’t need to be a Linux expert to set up, secure, and optimize your web applications. You can do everything from a simple and intuitive dashboard, saving you time and hassle.

    RunCloud supports various web servers, PHP versions, databases, and frameworks. You can also monitor your server performance, back up your data, and automate your tasks with RunCloud. Whether you are a developer, a freelancer, or a business owner, RunCloud can help you run your websites faster and smoother.

    What are you waiting for? Join RunCloud today and enjoy the best web hosting solution for your websites. It’s free for 7 days, no strings attached!

    Frequently Asked Questions (FAQ)

    Is clearing the DNS cache safe?

    Clearing the DNS cache is safe and does not affect your saved passwords, browser history, or other personal data. It removes outdated DNS information, ensuring your computer can fetch up-to-date DNS records.

    How often should I flush my DNS cache?

    There’s no hard rule on how often you should flush the DNS cache, but it’s a good idea to do it when you experience connection issues or DNS errors or after making changes to your network configuration (such as switching DNS providers).

    Does flushing the DNS cache affect my internet speed?

    Flushing the DNS cache may temporarily slow down website access on the first visit, as the DNS lookup will need to be performed again. However, once the cache is refreshed, your browser will store the new DNS records, which can speed up access to frequently visited websites.

    How do I know if my DNS cache was successfully flushed?

    After running the appropriate command to flush the DNS cache (such as ipconfig /flushdns on Windows), your system usually displays a message confirming that the DNS Resolver Cache was successfully flushed.

    Will clearing the DNS cache fix DNS errors?

    In many cases, yes. If you encounter errors like DNS_PROBE_FINISHED_NXDOMAIN or CONNECTION_TIMED_OUT, flushing the DNS cache can help resolve these problems by removing outdated or corrupted DNS entries.

  • How to Fix the ERR_NETWORK_CHANGED Error in Chrome

    How to Fix the ERR_NETWORK_CHANGED Error in Chrome

    If you use Google Chrome regularly, you’ve probably encountered the dreaded ERR_NETWORK_CHANGED error at least once. One moment, your page is loading fine – the next, you’re staring at a cryptic message that stops you in your tracks.

    This error means Chrome has detected a sudden change in your internet connection. Maybe your Wi-Fi briefly dropped, you switched networks, or your VPN reconnected in the background. The good news is that it’s almost always easy to fix – and you don’t need to be a networking expert to do it.

    In this guide, we’ll walk you through how to fix the ERR_NETWORK_CHANGED error in Chrome. You’ll learn the most common causes, how to troubleshoot them step-by-step, and how to get back online in minutes. We’ll start with quick fixes anyone can try, then move to more advanced solutions if the problem persists.

    Let’s get started!

    What Causes the ERR_NETWORK_CHANGED Error?

    This error appears when Chrome loses track of its network route to a website. Even a split-second change in your internet connection can trigger it. Common causes include:

    • Unstable Wi-Fi Connection: Brief drops in signal or switching between your router’s 2.4GHz and 5GHz bands can interrupt Chrome’s connection.
    • Switching Between Networks: Moving from Ethernet to Wi-Fi, or from Wi-Fi to mobile data, forces Chrome to re-establish the connection.
    • VPNs and Proxy Servers: Connecting, disconnecting, or switching VPN servers (or having a proxy enabled without realizing it) alters your network path.
    • Waking Your Computer from Sleep Mode: Your device’s network adapter may take a moment to reconnect, during which Chrome shows the error.
    • Faulty Network Hardware: Loose cables, an ageing router, or a failing modem can cause intermittent drops.
    • Outdated or Corrupt Network Drivers: If your network adapter drivers aren’t working properly, you’ll experience more frequent connection issues.
    • DNS Cache Issues: An outdated or corrupted DNS cache can send Chrome to the wrong address.

    Knowing the cause helps you apply the right fix faster. Let’s go through the steps – starting with the quickest solutions that solve most cases.

    How to Fix the ERR_NETWORK_CHANGED Error in Chrome

    Now that you know what’s behind the ERR_NETWORK_CHANGED error, it’s time to fix it. We’ll start with quick, low-effort checks that solve most cases, then move into more targeted troubleshooting if the problem sticks around.

    Important Instruction: Start with Solution 1 and work your way down the list. One of the first few steps will likely solve your problem, so you won’t need to complete the guide.

    Step 1: Quick Fixes

    These first steps take less than a minute each and solve most ERR_NETWORK_CHANGED errors. Think of them as a quick reset – no settings changed, just a fresh connection.

    Solution 1: Reload the Page to Clear Temporary Connection Glitches

    Before you do anything else, try the simplest fix of all. The network change may have been a temporary hiccup that has already resolved itself.

    • Click the reload icon (the circular arrow) next to the address bar in Chrome.
    • Or, press Ctrl + R on your keyboard (or Cmd + R on a Mac).

    If the page loads, you’re all set! If the error reappears, move on to the next step.

    Solution 2: Restart Your Router and Modem to Refresh the Network

    Restarting your router and modem is one of the most reliable ways to fix network issues. This process clears your hardware’s temporary memory, which can get clogged with errors over time.

    1. Unplug Router: Unplug the power cords from both your modem (the device that brings the internet into your home) and your router (the device that creates your Wi-Fi network).
    2. Wait 60 Seconds: Leave them unplugged for at least a full minute. This ensures they fully power down and clear their memory.
    3. Test Your Connection: Once your computer reconnects to the Wi-Fi, try loading the webpage again.

    Solution 3: Restart Your Computer to Fix System Connection Issues

    Your computer can also develop temporary glitches in its operating system or network services. A simple restart is a quick and easy way to fix them and start fresh.

    • For Windows: Go to the Start Menu, click the Power icon, and select Restart.
    • For macOS: Click the Apple logo in the top-left corner and select Restart….

    After your computer boots up, open Chrome and check if the error is gone.

    Step 2: Chrome-Specific Fixes

    If a simple restart didn’t help, the issue may be in Chrome’s stored data or your network configuration. These next steps dig deeper but are still safe and straightforward for any user.

    Solution 4: Clear Chrome’s Cache and Data to Remove Corrupt Files

    Chrome stores temporary data (cache and cookies) to help websites load faster. Sometimes, these files can become outdated or corrupt, especially after a network change, causing conflicts.

    1. Open Chrome and press Ctrl + Shift + Del on Windows or Cmd + Shift + Y on Mac to open the “Clear browsing data” window directly.
    2. Alternatively, go to Settings > Privacy and security > Clear browsing data.
    3. In the window that appears, set the “Time range” to All time.
    4. Check the box for “Cached images and files.” If you don’t want to be logged out of websites, leave “Cookies” and “Browsing history” unchecked.
    5. Click the Clear data button.

    Solution 5: Turn Off VPN or Proxy Server to Restore a Stable Connection

    VPNs and proxies change your network route, making them a primary suspect for this error. If you use a VPN, temporarily disconnect or quit the application completely. Then, try reloading the webpage. If the error is gone, the problem lies with your VPN’s connection or configuration. You may need to try connecting to a different server within your VPN app.

    Sometimes, a proxy can be enabled without you knowing.

    • On Windows: Go to Settings > Network & Internet > Proxy. Make sure “Use a proxy server” is turned off.
    • On macOS: Go to System Settings > Network, select your Wi-Fi or Ethernet connection, click Details…, and then go to the Proxies tab. Make sure no proxies are checked.

    Suggested Read: Best Chrome Extensions to Protect your Privacy

    Solution 6: Flush DNS and Reset Network Settings to Fix Address Conflicts

    This step sounds technical, but it only takes a single command in your computer’s terminal or command prompt.

    For Windows Users:

    1. Click the Start Menu and type cmd.
    2. Right-click on Command Prompt and select “Run as administrator.”

    Type the following command and press Enter:

    ipconfig /flushdns
    netsh winsock reset

    For macOS Users:

    1. Open the Terminal app (you can find it using Spotlight search with Cmd + Space).

    Copy and paste the following command and press Enter:

    sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
    1. You will be prompted to enter your Mac’s password. Type it in and press Enter (you won’t see the cursor move, which is normal). The command will run and fix the issue.

    Step 3: Network and Hardware Fixes

    If you’re still seeing the error, the problem may be tied to your device’s core software or hardware. These last steps address driver issues and hardware faults that can cause persistent connection drops.

    Solution 7: Update Your Network Adapter Drivers to Improve Stability

    A driver is the software that lets your operating system communicate with hardware like your Wi-Fi card. An outdated or corrupt driver can cause all sorts of connection instability.

    • On Windows:
      1. Right-click the Start Menu and select Device Manager.
      2. Expand the “Network adapters” section.
      3. Right-click on your primary adapter (it will usually have “Wi-Fi” or “Ethernet” in the name) and select Update driver.
      4. Choose “Search automatically for drivers.” Windows will search for and install any available updates.
    • On macOS:
      Apple handles driver updates differently. They are bundled with system software updates. To ensure your drivers are current, simply check for a system update:
      1. Go to System Settings > General > Software Update.
      2. Install any available updates.

    Solution 8: Run the Windows Network Troubleshooter for Automatic Fixes

    For Windows users, there’s a built-in tool designed to automatically find and fix network problems. It’s a quick way to detect and fix issues automatically.

    1. Go to Settings > System > Troubleshoot.
    2. Click on Other troubleshooters.
    3. Find the Network Adapter in the list and click the Run button next to it.
    4. Follow the on-screen prompts and let Windows attempt to diagnose and resolve the issue.

    Wrapping Up: Keep Chrome Connected and Avoid ERR_NETWORK_CHANGED in the Future

    The ERR_NETWORK_CHANGED error might interrupt your work, but fixing it is usually quick once you know where to start. Whether it’s a simple Wi-Fi hiccup, a VPN reconnecting, or a misconfigured setting, this guide should help you get Chrome back online fast.

    Of course, avoiding these interruptions starts with a stable, well-managed hosting environment – especially if you’re running WordPress sites for clients or your business.

    That’s where RunCloud comes in. It gives you a powerful, easy-to-use control panel for deploying, managing, and securing your WordPress sites on any cloud provider. You’ll spend less time troubleshooting and more time building and delivering projects without disruption.

    Take the hassle out of server management and keep your sites running smoothly.

    Start your free RunCloud trial today.

  • How to Delete A Large Directory with Thousands of Files in Linux

    How to Delete A Large Directory with Thousands of Files in Linux

    Deleting a large directory with thousands of files in Linux can be slow or even fail with basic commands. Whether you’re cleaning up old logs, project files, or datasets, knowing the right commands makes the process faster and more reliable.

    In this guide, we’ll show you how to delete directories with thousands of files in Linux using several methods – from rm and find to faster alternatives like rsync. You’ll learn which approach is best for different scenarios, how to avoid common errors, and how to free up disk space safely.

    Why Would You Need to Delete Thousands of Files at Once in Linux?

    If you use a computer professionally, you may have stored many files on your hard drive over time. These files can include documents, photos, videos, music, and more. Some of these files may be important and useful, while others may be outdated and unnecessary.

    Here are some possible scenarios:

    • You are a web developer and you have a project folder that contains thousands of files, such as HTML, CSS, JavaScript, images, etc. You want to delete the project folder because you no longer need it or you want to start from scratch.
    • You are a data analyst and you have a directory that contains thousands of CSV files, each containing data that you have processed or analyzed. You want to delete the directory because you have finished your analysis, and you want to free up some disk space.
    • You are a system administrator and you have a directory that contains thousands of log files, each recording system events or errors. You want to delete the directory because you have resolved the issues. If you want to clear the logs periodically then you should also read our article on log-rotation.
    • You are a photographer and you have a directory that contains thousands of RAW images, each capturing moments that you have taken with your camera. You want to delete the directory because you have edited or backed up the images, or you want to make room for new photos.

    Having too many files can affect your computer’s performance and disk space. Therefore, it is advisable to periodically delete the files that you no longer need or want.

    How Do You Delete a Directory in Linux?

    There are multiple ways to delete a file or folder in Linux. Let’s take a look at some of these ways.

    However, be careful when using these commands, as they are irreversible and may delete important files if used incorrectly.

    Always double-check the path and the options before executing them.

    How to Delete a Large Directory in Linux with rm

    The rm command is one of the most common and basic commands for deleting files and directories in Linux. To delete a directory and all its contents, you can use the -r option, which stands for recursive.

    For example, if you want to delete a directory named project, you can use the command:

    rm -r project
    how to use rm command linux

    However, this command may take a long time and generate a lot of output if there are too many files in the directory. To speed up the process and suppress the output, you can use the -f option, which stands for force.

    This option will delete the files and directories without prompting for confirmation or showing any messages.

    rm -rf project

    How to Delete Files and Directories in Linux with find

    Alternatively, you can use the find command, which is a powerful and flexible command for finding and manipulating files and directories in Linux.

    To delete a directory and all its contents, you can use the -delete option, which will find and delete all the files and directories under a given path. For example:

    find project -delete

    The find command also has many other options that allow you to selectively delete files based on different criteria, such as pattern, date, time, or size.

    How to Use rsync to Delete a Directory in Linux

    The rsync command is generally used to transfer and synchronize files between local and remote devices in an efficient way. It uses a special algorithm that only sends the differences between the source and destination files, which reduces the network usage and speeds up the transfers.

    This can be used for various scenarios, such as backup, mirroring, updating, copying, or even deleting files and directories. To delete a folder using rsync, you can use the following simple command:

    rsync -a --delete source/ destination/

    This command will sync the contents of the source folder to the destination folder, and delete any files or subfolders in the destination that do not exist in the source. The options used in this command are:

    • -a archive mode, which preserves almost everything (such as symbolic links, file permissions, user & group ownership, and timestamps).
    • --delete delete mode, which deletes extraneous files from the destination location.

    Note that you need to add a trailing slash (/) after the source and destination folder names, otherwise rsync will treat them as file names and create a subfolder in the destination.

    For example, if you use rsync -a --delete source destination, rsync will create a subfolder named source in the destination and sync the contents of the source folder to it.

    How to Securely Delete Files in Linux with shred

    Shred is used to permanently erase or destroy files so that no one can recover them. It is better than deleting normally, because a normal deletion only removes the reference to the file in the file system, but the actual data remains on the disk until it is overwritten by other data.

    A deleted file can be recovered using special software or hardware tools that can scan the disk for traces of data. Shred prevents this by overwriting the file multiple times with random data, making it impossible to reconstruct the original data.

    Shred also adds a final overwrite with zeros to hide the fact that the file was shredded. Therefore, shred is more secure and reliable than deleting normally, especially for sensitive or confidential files.

    To shred a document in Linux, you can use the following simple command:

    shred -uvfz document

    This command will overwrite the data in the document file several times, making it harder for third party software and hardware probing to recover the data. The options used in this command are:

    • -u flag will remove the file or directory after overwriting it with random data.
    • -v verbose mode, which shows information on shredded files.
    • -f force mode, which changes permissions to allow writing if necessary.
    • -z zero mode, which adds a final overwrite with zeros to hide shredding.
    Shred files to delete in linux

    The shred command can only be used to delete files and not directories. However, it is possible to use it in conjunction with other commands to create automated scripts that shred entire directories.

    For example, you can use the ‘find’ command with the -exec option to execute the shred command on each file found by ‘find’. Here is an example of how to shred and delete all the files in a directory named ‘secret’:

    find secret -type f -exec shred -u {} \;

    This command will find all the files in the secret directory and execute the shred command with the -u option on each of them.

    However, be aware that the shred command relies on the assumption that the underlying file system overwrites the same physical block when writing new data. Many newer file systems do not follow this assumption, and may use techniques such as journaling, copy-on-write, or wear leveling, which may prevent the shred command from effectively destroying the data. Therefore, shred may not work as expected on some file systems, such as ext3, ext4, btrfs, xfs, etc.

    How to Selectively Delete Files in Linux

    There are also a number of different ways in which it is possible to selectively delete files in Linux, depending on the criteria that you want to use. Here are some examples:

    How to Delete Files by Pattern in Linux

    You can use the rm command with a wildcard character (*), which matches any number of characters. This way, you can delete files that match a certain pattern, such as files with a specific extension, name, or prefix.

    For example, if you want to delete all the files that have the .txt extension in the current directory, you can use the command:

    rm *.txt

    If you want to delete all the files that start with the prefix test in the current directory, you can use the command:

    rm test*

    How to Delete Files by Date or Time in Linux

    You can use the find command with various options that locate files based on their modification (-mtime or -mmin), change (-ctime or -cmin), or access (-atime or -amin) time.

    These options take a number as an argument, which can be preceded by either a plus sign (+) or a minus sign (-). A plus sign means more than the given number, while a minus sign means less than the given number.

    The number can be either days (-mtime or -ctime) or minutes (-mmin, -cmin, or -amin).

    For example, if you want to delete all the files that were modified more than 10 days ago in the current directory, you can use the command:

    find . -mtime +10 -delete

    If you want to delete all the files that were accessed less than 30 minutes ago in the current directory, you can use the command:

    find . -amin -30 -delete

    How to Delete Files by Size in Linux

    You can use the find command with the -size option, which finds files based on their size.

    This option takes a number as an argument, which can be followed by a suffix that indicates the unit of measurement. The suffix can be either bytes (b), kilobytes (k), megabytes (M), gigabytes (G), or blocks (c).

    A plus sign (+) or a minus sign (-) before the number means larger than or smaller than respectively.

    For example, if you want to delete all the files that are larger than 100 MB in the current directory, you can use the command:

    find . -size +100M -delete

    If you want to delete all the files that are smaller than 1 KB in the current directory, you can use the command:

    find . -size -1k -delete

    Key Takeaways on Deleting Large Directories in Linux

    Deleting files in Linux may seem like a simple action, but there are lots of hidden nuances and challenges that you may encounter. In this article, we have explained how to delete directories with a large number of files in Linux using a variety of different commands and options.

    We have also shown you how to selectively delete files based on different criteria, such as pattern, date, time, or size. However, you need to be careful when using these commands, as they are irreversible and may delete important files if used incorrectly. Always double-check the path and the options before executing them.

    If you are struggling with the Linux command line, then you should take a look at RunCloud. RunCloud allows you to manage your sites effectively without needing to become a Linux system administrator. You can easily create, deploy, and update your websites with just a few clicks.

    RunCloud supports various web servers, such as Apache, Nginx, and LiteSpeed. You can also switch between different PHP versions with the click of a button. RunCloud works with any cloud provider, such as AWS, Google Cloud, DigitalOcean, and more. Sign up to RunCloud today and forget all the hassle!

    FAQs on Deleting Large Directories and Files in Linux

    What Does the “Argument List Too Long” Error Mean in Linux?

    This error occurs when a command like rm * expands to more filenames than the system can handle at once. You must use a more robust method, like the find or rsync commands, which process files individually or in batches.

    Why Is rm -r Slow in Linux and How Can I See Progress?

    rm can be slow because it has to process the metadata for every single file before deleting it. To see progress, you can add the verbose flag (rm -rv), which will print each file name as it’s deleted, though this can slow the process further.

    What Is the Difference Between rm -r and rm -rf in Linux?

    The -r flag means “recursive” to delete a directory and everything inside it. The -f flag means “force,” which suppresses confirmation prompts and ignores non-existent files, making it much more dangerous if you make a typo.

    Can I Do a Dry Run Before Deleting Files in Linux?

    Yes, before running a delete command, you can first list the files you intend to target by using find /path/to/directory -type f -print to be sure you’re in the right place.

    What Is the Fastest Way to Delete a Large Directory in Linux?

    The rsync method is often the fastest as it is highly optimized for this task. It works by syncing an empty directory over your target directory, which efficiently removes the files with minimal overhead.

    How Do I Fix “Permission Denied” Errors When Deleting Files in Linux?

    This means your user doesn’t have the rights to delete those files. You may need to run the command with sudo at the beginning, but be extremely careful as this grants root privileges and a mistake can damage your system.

    Can I Recover Files After Deleting Them in Linux?

    Unfortunately, no; command-line deletion in Linux is permanent and does not use a Trash or Recycle Bin. This is why you must always double-check your command and ensure you have reliable backups.

    What Happens If I Cancel a Deletion Mid-Process in Linux?

    The command will stop, but the files that were already deleted are gone forever. You will be left with a partially deleted directory that you can attempt to delete again later.


  • The Best Invoice Management Software for 2026: Features, Pricing & Expert Picks

    The Best Invoice Management Software for 2026: Features, Pricing & Expert Picks

    If you’re still sending invoices from Word documents, chasing late payments with awkward follow-up emails, or juggling endless spreadsheets, you’re wasting time you could spend on actual client work.

    The right invoice management software can handle all that for you – creating professional invoices in minutes, tracking when they’re opened and paid, and sending polite reminders automatically.

    In this guide, we’ll compare leading options, including QuickBooks, Xero, and FreshBooks, with strong alternatives such as Zoho Invoice, Wave, and others. You’ll see the key features, pricing, and differences that matter so you can choose the tool that will save you time, help you get paid faster, and keep your finances in order.

    Let’s get started!

    What is Invoice Management Software?

    Invoice management software replaces the messy mix of spreadsheets, manual invoices, and payment-chasing emails with one streamlined system.

    Instead of building each invoice from scratch and tracking payments in a separate file, you can create branded invoices in minutes, send them directly to clients, and see exactly when they’re viewed or paid.

    The goal is simple: cut down on admin, speed up payments, and give your business a more professional edge.

    How Invoice Management Software Works

    Here’s how most platforms handle the process from start to finish:

    1. Create – Pick a template, add your logo, enter client details, and list products or services. The system calculates totals, taxes, and discounts automatically.
    2. Send & Track – Email the invoice straight from the platform and see when it’s sent, opened, and paid.
    3. Remind – Set up automatic reminders for upcoming or overdue payments.
    4. Get Paid – Add a “Pay Now” button linked to gateways like Stripe, PayPal, or Square for instant payment.
    5. Report – View real-time data on revenue, outstanding invoices, and tax collected.

    Suggested read: 10 Best WordPress Management Tools To Easily Manage Multiple Websites

    Top Features to Look for in the Best Invoice Management Software

    When evaluating different invoice management platforms, not all are created equal. To ensure the software meets your business needs and can scale with you, focus on these essential features:

    • Customizable Invoice Templates: Look for the ability to easily add your logo, adjust colors, and modify the layout to create professional invoices that reflect your brand identity.
    • Automation Capabilities: The best software automates key tasks. This includes setting up recurring billing for retainer clients, scheduling future invoices, and, most critically, sending automated late-payment reminders.
    • Online Payment Gateway Integration: This is an important feature for getting paid quickly. Ensure the software integrates with popular and trusted payment gateways so clients can pay you with a single click.
    • Real-Time Invoice Tracking: The ability to see the status of an invoice (e.g., Sent, Viewed, Paid, Overdue) in real-time provides clarity and helps you manage your cash flow more effectively.
    • Robust Reporting and Analytics: Your software should provide clear, easy-to-understand reports on your income, expenses, outstanding invoices, and payment history to help you make informed business decisions.
    • Integrations with Other Tools: Check for compatibility with your existing software, such as accounting platforms (like QuickBooks or Xero), CRM systems, or project management tools, to create a seamless workflow.
    • Mobile Accessibility: A dedicated mobile app or a mobile-responsive web interface is essential for managing your business on the go. These apps allow you to send invoices and check payment statuses from anywhere.
    • Multi-Currency and Multi-Language Support: This feature is non-negotiable if you work with international clients. It allows you to bill clients in their local currency and language, simplifying the process for everyone.

    Suggested read: How to Get Your Website Indexed by Search Engines in 2026: A Complete Guide

    The 15 Best Invoice Management Solutions for 2026 (Features + Pricing)

    #1 – Rossum

    Rossum provides an e-invoicing platform as a single solution designed to handle the complexities of modern businesses, particularly for companies operating across multiple regions. It uses sophisticated AI to automate the entire document lifecycle, from initial receipt to final processing. It also allows businesses to manage a hybrid reality where they receive both traditional PDF invoices and structured e-invoices.

    The system is engineered to be more than a simple data entry tool. It automatically validates invoices against country-specific regulations, such as FatturaPA, XRechnung, and PEPPOL, and ensures compliance with evolving government mandates. This is particularly relevant for companies navigating the rollout of new e-invoicing requirements across Europe.

    Additionally, the platform can convert machine-readable e-invoices into human-readable PDFs for auditing purposes and integrates with major ERP and business systems, including SAP, NetSuite, and Workday, to ensure data flows smoothly into your existing financial ecosystem.

    Pricing and Subscription Plans

    Rossum uses a customized pricing model based on factors like invoice volume, number of users, required integrations, and feature set. They encourage potential customers to request a free demo or start a 14-day trial to experience the platform firsthand.

    Suggested read: How To Migrate Away from cPanel Hosting (The Escape Guide)

    #2 – Tipalti Invoice Management

    Tipalti offers a comprehensive invoice management solution as part of its broader accounts payable automation platform. The platform is designed primarily for mid-market and enterprise-level businesses that manage high volumes of invoices. It offers multiple methods for invoice capture, including email, a supplier portal, and OCR scanning, which can read and process invoice data with high accuracy.

    Tipalti also offers an advanced validation and approval system. The platform can perform two- and three-way PO matching and uses a powerful business rules engine to enforce internal controls, automatically routing invoices to the correct approvers. It also includes built-in compliance features, such as validating tax information (like W-9s and VAT IDs) before processing payments.

    Pricing and Subscription Plans

    Tipalti offers three plans: the “Select” plan is priced at €99 per month and includes unlimited user access, a supplier portal for self-onboarding, automated VAT ID collection and validation, AI Smart Scan for invoice processing and auto-coding, an AI Smart Report builder, and seamless integrations with leading ERPs. For more complex requirements, the “Advanced” plan, at €219 per month, contains all “Select” features while adding capabilities such as 2/3 way PO Matching, flexible bill approval rules, domestic multi-entity infrastructure, global Tax ID collection and validation, etc.

    Suggested read: How to Edit robots.txt in WordPress (With & Without Plugin)

    #3 – Yooz AP

    Yooz is a “pure cloud” solution for accounts payable that emphasizes speed and simplicity in its end-to-end invoice and payment processing. The platform uses advanced technologies like AI, deep learning, and robotic process automation (RPA) to minimize manual intervention from invoice capture to final payment. One of its primary highlights is its sophisticated data extraction capability. It can accurately capture relevant information from any document format, including emails, PDFs, and scanned paper, without prior template configuration.

    The platform is designed to provide a complete workflow. After capturing an invoice, Yooz automatically handles GL coding, identifies duplicates, and initiates multi-level approval workflows that can be managed from any device, including a dedicated mobile app.

    It has integrations for over 250 ERP and financial software packages, including popular systems like Sage, Xero, and QuickBooks. This means Yooz can serve many businesses, from small companies to larger enterprises, looking to streamline their AP processes.

    Pricing and Subscription Plans

    Although specific costs are customized, Yooz offers a more transparent pricing structure than many enterprise-level competitors. The company provides a tailored quote based on the client’s needs but frames its plans around clear tiers.

    Yooz structures its pricing based on the yearly invoices you expect to process (e.g., up to 1,200, up to 6,000, etc.). This makes it scalable, allowing businesses to choose a plan that fits their current size and adjust as they grow.

    Suggested read: How to Set Up a Hetzner Server with RunCloud

    #4 – Stampli

    Stampli offers an Accounts Payable automation platform emphasizing centralizing communication and collaboration directly on top of the invoice. Its core philosophy is eliminating the need for external email threads and disjointed conversations when resolving invoice-related queries.

    Once an invoice is in the system, it becomes the central hub for all activities, including questions for approvers, stakeholder clarification, and related documentation. This ensures that the entire history of an invoice’s lifecycle, from receipt to approval, is contained in one auditable location.

    Stampli is designed to be flexible, managing various invoice types, including those with or without purchase orders. It integrates seamlessly with leading ERP systems like NetSuite, Sage Intacct, QuickBooks, and Microsoft Dynamics.

    Pricing and Subscription Plans

    Stampli uses a customized pricing model based on factors like invoice volume, number of users, required integrations, and feature set. Contact the provider for a tailored quote.

    The factors that influence the final subscription cost include:

    • Invoice Volume: The number of invoices your business processes monthly or annually.
    • Number of Users: The quantity of user seats required for your AP team, approvers, and other stakeholders.
    • ERP Integration: The specific ERP system being used and the complexity of the integration.
    • Feature Set: Access to specific advanced features or modules within the Stampli platform.

    #5 – Paylocity

    Paylocity’s AP Automation solution is an integrated module within its comprehensive Human Capital Management platform. It is primarily designed for businesses seeking to unify their finance and HR operations under a single vendor, creating a seamless connection between employee data and financial workflows. The tool automates the standard accounts payable lifecycle, from invoice capture using OCR technology to setting up customizable, multi-step approval workflows that route invoices to the correct stakeholders.

    It securely processes vendor payments via ACH, virtual card, or check and ensures that all data syncs with the general ledger in real time. By linking AP processes directly with its core HR and payroll systems, Paylocity provides businesses with enhanced visibility and a single source of truth. This improves data consistency and streamlines overall administrative tasks across departments.

    Pricing and Subscription Plans

    Paylocity operates on a customized, quote-based pricing model and does not publicly list standard rates for its AP Automation module. As the tool is part of a larger HCM suite, its cost is bundled with other core services like Payroll, HR, and Time & Labor. This means pricing is not offered on a standalone basis for just the AP tool.

    The final cost is calculated per employee, per month (PEPM), with the AP Automation functionality added to a company’s main service package.

    #6 – QuickBooks Invoicing

    QuickBooks Invoicing is not a standalone product but an integrated feature within the comprehensive QuickBooks accounting software ecosystem. It is designed primarily for freelancers, small businesses, and mid-sized companies needing a unified billing and bookkeeping solution. The platform allows users to create professional, customized invoices with their own branding, send them directly to clients, and track their status in real time to see when they have been viewed and paid.

    The main strength of QuickBooks Invoicing lies in its seamless integration with the rest of the accounting suite. When a client pays an invoice online via the built-in payment gateway, the transaction is automatically recorded, categorized, and reconciled within the user’s books, drastically reducing manual data entry and potential errors.

    Additionally, it can set up recurring invoices for retainers, send automated payment reminders for overdue accounts, and directly convert estimates into invoices, streamlining the entire sales cycle from proposal to payment.

    Pricing and Subscription Plans

    The invoicing functionality is not sold separately but is included in all QuickBooks Online subscription plans. Therefore, the pricing is tied directly to the cost of the overall accounting software package. QuickBooks offers several tiered plans, which start at $19/month and go as high as $76/month.

    #7 – Vyapar E-Invoicing

    Vyapar is a business accounting application designed to meet the needs of small and medium-sized businesses in India. Its e-invoicing functionality is built to simplify compliance with the Indian government’s Goods and Services Tax (GST) e-invoicing mandate. The platform enables users to generate GST-compliant invoices and seamlessly register them on the government’s Invoice Registration Portal (IRP) to obtain the required Invoice Reference Number (IRN) and QR code.

    It is an all-in-one solution for Indian SMEs as it integrates this compliance feature into a broader ecosystem that includes inventory management, payment reminders, expense tracking, and generating various GST reports (like GSTR-1 and GSTR-3B).

    Pricing and Subscription Plans

    Vyapar operates on a freemium model, one of its key market differentiators. The core e-invoicing functionality is available as part of its free business accounting software, making it highly accessible for freelancers, sole proprietors, and small businesses needing GST compliance without an upfront investment.

    The pricing structure is as follows:

    • Free Plan includes essential features like creating GST-compliant invoices, managing inventory, and generating e-invoices. It is a fully functional offering designed to cover the basic needs of a small business.
    • Premium Subscriptions: Vyapar offers paid subscription plans starting at INR ₹3999/year (approximately USD $45) for businesses that require more advanced capabilities. These premium tiers unlock features such as multi-device synchronization (for using the app on both mobile and desktop), support for managing multiple businesses from a single account, and other advanced functionalities.

    #8 – Swipe Invoicing & Business Management

    Swipe is a mobile-focused application designed to serve as an all-in-one business management tool for freelancers, solopreneurs, and small businesses in India. It is mainly built to create and manage GST-compliant invoices quickly. The platform is distinctly tailored to the Indian market, integrating natively with ubiquitous payment and communication channels in the region.

    Users can send invoices, payment links, and reminders directly to clients via WhatsApp, a feature that aligns closely with common small business workflows in India. Additionally, it facilitates instant payment collection through embedded UPI invoice payment links.

    In addition to invoicing, Swipe offers a suite of complementary features, including inventory management, expense tracking, business reporting (including GSTR-1), and the ability to create a simple “online store” to showcase products.

    $

    Pricing and Subscription Plans

    Swipe uses a clear, tiered subscription model with a free plan, making it highly accessible for new and emerging businesses. The pricing structure is transparently listed on their website and is designed to be affordable.

    The model is structured as follows:

    • Free Plan: This entry-level plan allows users to test the core functionality, but with limitations on the number of invoices, products, and clients that can be managed monthly. It is well-suited for businesses with very low transaction volumes.
    • Paid Subscriptions: Swipe offers several paid tiers starting at ₹250/month (approximately USD $2.90). These plans significantly increase or remove the limits on invoices and products and unlock more advanced features. Advanced compliance tools like e-invoicing and e-way bill generation are reserved for these premium tiers.

    #9 – Wave Invoicing

    Wave offers a suite of features designed to streamline the billing process for small businesses. Its software allows users to create and send customized, professional invoices using professional templates, with options to add a business logo and brand colors. Wave supports recurring invoices and automatic credit card payments for businesses with repeat customers to ensure timely billing without manual intervention.

    It also allows customers to accept online payments directly through invoices. Customers can pay via credit card, bank payment (ACH/EFT), or Apple Pay by clicking a “Pay now” button on the invoice. The platform also includes features to improve cash flow management, such as notifications tracking when an invoice is viewed, due, or paid.

    Pricing and Subscription Plans

    Wave uses a freemium model with two tiers: “Starter” and “Pro”:

    The Starter Plan is free and allows users to create and send unlimited invoices and estimates. This plan includes the option to accept online payments, with transaction fees of 2.9% + $0.60 per transaction for most credit cards and 3.4% + $0.60 for American Express. Bank payments are charged at 1% per transaction with a $1 minimum fee.

    The Pro Plan costs $190/year and includes advanced automation and customization features. Subscribers can automatically import bank transactions, capture unlimited receipts digitally, and automate late payment reminders. This plan also offers discounted online payment processing fees for the first ten monthly transactions.

    #10 – Refrens Invoice Generator

    Refrens offers a free online invoice generator for freelancers, consultants, and small agencies. The platform allows users to quickly create professional, customized invoices, with options to add a company logo, signature, and attachments. A significant highlight of the free tool is that the invoices generated do not carry any Refrens branding, a feature often reserved for paid tiers in other tools.

    In addition to simple invoice creation, the tool is part of a broader freelance business management suite. When you create an invoice, the client is automatically saved in a simple client management system, and the platform also includes features for expense tracking and report generation.

    Pricing and Subscription Plans

    Refrens operates on a freemium model, with its core online invoice generator and associated business management tools completely free. The pricing structure is structured as follows:

    • Free Plan includes essential features like creating GST-compliant invoices, managing inventory, and generating e-invoices. It is a fully functional offering designed to cover the basic needs of a small business.
    • Accounts GST Lite: This plan costs INR ₹6,400 per year (approximately USD $73) per business and includes everything in the free plan, template customization, payment gateway integration, 1-click WhatsApp sharing, email tracking and scheduling, recurring invoices, etc.
    • Accounts GST: This plan costs INR ₹16,800 per year (approximately USD $192) per business and includes everything in the Accounts GST Lite plan, plus automated GSTR-1 Reports, e-way bill generation, e-invoices, and bulk IRN generation, e-way bills with IRN, the ability to verify and auto-fill clients GST details, emails from your own domains, GSTR-2B reports download and auto-reconciliation, and more.

    #11 – Odoo Invoicing

    Odoo Invoicing is not a standalone tool – it’s a module within Odoo’s suite of open-source business management applications. The biggest advantage of using Odoo is its native integration with other Odoo apps like Accounting, Sales, and CRM. These integrations create a deeply connected workflow from a sales quote to a reconciled payment.

    When an invoice is created, it directly impacts inventory levels and accounting ledgers in real-time. The system also features a customer portal where clients can view their invoices, track payment status, and pay online through integrated payment gateways like Stripe and PayPal. This holistic approach makes it a powerful option for businesses looking for a single, scalable system that can grow with them from a simple invoicing tool into a full-fledged Enterprise Resource Planning solution.

    Pricing and Subscription Plans

    Odoo’s unique and flexible pricing model sets it apart from many competitors. The Invoicing app is part of the broader Odoo Accounting app.

    The pricing structure is as follows:

    • One App Free Plan: Odoo offers a plan to use a single application for free with unlimited users. Since Invoicing is part of the Accounting app, you can use the full Accounting suite (including invoicing) at no cost. This makes it an incredibly compelling option for small businesses and startups.
    • Paid Plans (Standard and Custom): Odoo offers paid plans for businesses that need to use more than one Odoo application (e.g., combining Accounting with CRM, Inventory, and Project Management). These plans start at $19.90 per month, and they have a per-user, per-month fee that grants access to all of Odoo’s applications.

    #12 – Xero

    Xero’s online invoicing capability is one of the best features of its comprehensive cloud accounting platform, which is designed for small to medium-sized businesses. The tool enables users to create professional, customized invoices from a desktop or a dedicated mobile app and send them directly to clients.

    Once an invoice is sent, businesses can set up automatic reminders to chase late payments without manual effort. Additionally, when a client pays via an integrated payment gateway like Stripe or GoCardless, the payment is automatically matched against the invoice and reconciled with the corresponding bank transaction. This significantly reduces administrative work and ensures that financial records are always up-to-date.

    Pricing and Subscription Plans

    Xero’s invoicing feature is not available as a standalone product but is a core component across all its subscription plans. Xero offers three tiered pricing plans: “Starter” at USD $29 per month, “Standard” at USD $46 per month, and “Premium” at USD $69 per month. Each plan includes the core invoicing features, with higher tiers offering additional accounting functionalities.

    #13 – FreshBooks

    FreshBooks offers invoicing software along with its all-in-one accounting software. This software is designed for service-based small businesses, freelancers, and agencies. The platform is widely recognized for its user-friendly interface, simplifying the creation of professional, customized invoices in minutes.

    FreshBooks also offers a unique time tracking feature that calculates the time spent on a project. This feature makes it easy for you to bill clients fairly. The system also automates follow-ups with late payment reminders. It allows clients to pay directly from the invoice via integrated payment gateways, which are automatically recorded and reconciled within the accounting system.

    Pricing and Subscription Plans

    The invoicing functionality is not sold as a separate product but is a core feature included in all FreshBooks subscription plans.

    The Lite plan starts at USD $2.10 per month, the Plus plan is USD $3.80 per month, and the Premium plan is USD $6.50 per month. These prices reflect a 90% discount for the first three months. After the initial three months, the prices will increase to $21, $38, and $65 per month.

    #14 – Zoho Invoice

    Zoho Invoice is a dedicated invoicing application that’s part of the extensive business software suite. Unlike many other tools discussed in this article, Zoho Invoice is a standalone. It is specifically designed for freelancers and small to medium-sized businesses, and offers a comprehensive set of features to automate and manage the entire billing cycle.

    Users can create highly customized invoices from a gallery of templates, set up recurring billing for repeat customers, and automatically send payment reminders to reduce manual follow-up.

    One of its most valued features is the self-service client portal. It allows customers to view all their past and present invoices, approve estimates, and make bulk payments in one place, enhancing transparency and client relations.

    The platform integrates with numerous online payment gateways and enables instant payment collection directly from the invoice. While it works independently, it seamlessly integrates with other Zoho apps, such as Zoho CRM and Zoho Analytics.

    Pricing and Subscription Plans

    Zoho Invoice’s most significant and compelling feature is its pricing model: the software is completely free to use. This is not a limited-time trial or a freemium plan with major restrictions on core features.

    The pricing structure is as follows:

    • Free Plan: The standard Zoho Invoice plan is free and allows businesses to manage a substantial number of customers (up to 1,000) and send unlimited invoices. It includes access to customizable templates, automated reminders, time tracking, expense management, and payment gateway integrations, making it one of the most robust free invoicing solutions available on the market.
    • Zoho Books: While Zoho Invoice is free, businesses that require more advanced, double-entry accounting features (like a full balance sheet, bank reconciliation, and in-depth financial reporting) are encouraged to upgrade to a paid subscription of Zoho Books, which includes all the functionality of Zoho Invoice and much more.

    #15 – Sage Intacct

    Sage Intacct is a cloud financial management and accounting platform designed for mid-market and enterprise-level organizations that have outgrown simpler accounting software.

    Unlike other tools discussed in this article, Sage Intacct isn’t merely an invoicing tool but a full-fledged cloud ERP system focused on automating complex financial processes. The platform excels in areas where businesses face significant complexity. For example, its multi-entity management capabilities allow companies with multiple business units, locations, or legal entities to automate financial consolidation in real-time.

    Sage Intacct also provides powerful, dimensional reporting and dashboards that give finance leaders deep visibility into performance metrics across various business drivers. This allows for sophisticated analysis without relying on cumbersome spreadsheets.

    Pricing and Subscription Plans

    Sage Intacct uses a customized pricing model based on factors like invoice volume, number of users, required integrations, and feature set. Contact the provider for a tailored quote.

    Wrapping Up: Who Should Invest in Invoice Management Software in 2026

    Any freelancer, agency, or service-based business that wants to get paid faster and spend less time on admin should invest in invoice management software. If you’re still sending invoices manually or juggling spreadsheets, switching to a dedicated platform will save time, improve accuracy, and make your business look more professional.

    For agencies, though, invoicing is only half the picture. You also need to manage the technical side of client work – hosting, performance, and security.

    That’s where RunCloud fits in.

    While your invoicing software handles the money, RunCloud takes care of the servers and websites behind your client projects.

    With features like Workspaces, backups, server monitoring, and SSL management, you can manage all your client sites from one place while keeping costs under control. Combine the right invoicing tool with RunCloud, and you’ve got a complete operations setup – from sending the first invoice to maintaining the last website.

    Ready to take control of your agency’s technical operations? Sign up for RunCloud today.

    FAQs on Invoice Management Software

    What is the difference between invoice management software and accounting software?

    Invoice management software focuses on creating, sending, and tracking invoices. Accounting software includes invoicing but also handles the rest of your financial operations – bookkeeping, expense tracking, reporting, and tax preparation.

    Can invoice management software integrate with my ERP or CRM?

    Yes, most modern invoice management platforms are designed to integrate seamlessly with other business systems, such as Enterprise Resource Planning (ERP) or Customer Relationship Management (CRM) software.

    Is cloud-based invoice management secure?

    Yes – leading platforms use encryption, secure infrastructure, multi-factor authentication, and regular audits. This means your client and payment data is protected from interception or unauthorised access, reducing both security and compliance risks.

    How much does invoice management software cost in 2025?

    In 2025, the cost of invoice management software varies widely, from free plans with basic functionality to enterprise solutions costing several hundred dollars per month. For small to mid-sized businesses, typical monthly plans range from approximately $15 to $60 per user. Pricing is often tiered based on the number of clients, invoices, users, and access to advanced features like payment gateways.

    What is the best free invoicing app?

    The “best” free invoicing app depends on your needs, but businesses often recommend Wave, Zoho Invoice’s free plan, and PayPal Invoicing. These tools offer core invoice creation, sending, and tracking at no cost but may have limitations on the number of clients or access to advanced features. They are an excellent starting point for freelancers and new businesses before scaling to a paid plan.

  • How to SSH Into Docker Container

    How to SSH Into Docker Container

    If you’ve ever searched for information on how to SSH into a Docker container, you’ve probably found conflicting advice. The truth is, you don’t usually need to run an SSH server inside a container at all. Instead, Docker provides built-in commands that give you secure, direct access to your containers.

    In this guide, we’ll show you the correct ways to get a shell inside a running container, explain the difference between docker exec and docker attach, and demonstrate how to safely detach without stopping your application. We’ll also cover when copying files makes sense, and why adding a full SSH server inside a container should be avoided except in rare cases.

    Let’s get started!

    Why should you use CLI over Docker Desktop?

    While graphical user interfaces for Docker exist, the CLI is the primary and most powerful way to interact with the Docker daemon and containers. There are several scenarios where you’ll need to access your Docker server via the CLI:

    • Automation and Scripting: The most significant advantage is the ability to script any Docker operation. The CLI allows you to build a CI/CD pipeline, automate deployments, create complex multi-container setups with Docker Compose, and much more.
    • Server Environments: Most servers run headless (without a graphical interface). When you SSH into a remote production server, the CLI is the only way to manage Docker containers.
    • Precision and Control: The CLI gives you fine-grained control over every possible Docker option and flag. This level of precision is often abstracted or unavailable in GUIs.
    • Resource Efficiency: The CLI is lightweight. GUIs consume additional system resources that are better allocated to your applications, which is critical on a production server.
    • Universality: The Docker CLI is consistent across all platforms (Linux, macOS, and Windows). This universal experience makes it a reliable tool for developers and administrators, regardless of their local operating system.

    Suggested read: Essential Commands for Getting Started with Docker

    How To Get a Shell Into a Docker Container

    When debugging an issue in a Docker container, shell access is extremely helpful because it lets you monitor and inspect individual services.

    The phrase “SSH into a container” is common, but technically a misnomer. The most common and recommended methods do not involve running an SSH server inside the container at all. Let’s explore the primary techniques for gaining access and their common use cases.

    Using the ‘docker exec’ command (Recommended)

    The docker exec command is the most direct and recommended method for getting an interactive shell in a running container. This command starts a new process inside the container, letting you run commands without attaching to its primary process. Use the following command to get CLI access to your Docker container:

    docker exec -it <container_name_or_id> <command>
    • -i (–interactive): Keeps STDIN open, allowing you to type commands.
    • -t (–tty): Allocates a pseudo-TTY, which connects your terminal to the container’s shell, making it interactive.
    • <command>: The command to run. To get a shell, this is typically /bin/bash or /bin/sh.

    In the above example, we executed the date command inside a container with the ID ba06f65c55e7. It returned the current date and time of the Docker container (which was different from the host system).

    When to use the ‘docker exec’ Command

    • Debugging a Live Application: If your web server is running in a container and throwing errors, you can use docker exec to get a shell, check log files that aren’t being piped to stdout, inspect the environment variables (env), or use tools like curl from inside the container to test network connectivity to other services.
    docker exec -it my-web-app /bin/bash
    • Running Database CLI Tools: You need to inspect a database running inside a container. To do so, you can exec into the container and use a command-line client like psql or mysql.
    docker exec -it my-postgres-container psql -U myuser -d mydatabase
    • Installing Debugging Tools: Your container uses a minimal base image and doesn’t include tools like ping or vim. You can use exec to open a shell and install them temporarily for the current session.
    # Get a shell and then install curl
    docker exec -it my-app /bin/sh
    # Inside the container shell:
    # apt-get update && apt-get install -y curl

    Note: Changes made via docker exec (like installing a package) are ephemeral. If the container restarts, they will be gone. To make permanent changes, you should modify your Dockerfile and rebuild the image.

    Using the ‘docker attach’ Command

    The docker attach command connects your terminal’s input and output streams directly to the container’s main process (PID 1). This is fundamentally different from docker exec, which starts a new process. Execute the following command to attach to a Docker container:

    docker attach <container_name_or_id>

    When to use the ‘docker attach’ Command:

    • Interactive Applications: If you use a container that runs an interactive process by default (like a Python REPL or a shell itself), you can use the docker attach command to connect to it.
    # Start a basic container with an interactive shell process
    docker run -it --name my-interactive-shell ubuntu /bin/bash
    # If you detach, you can re-attach with:
    docker attach my-interactive-shell
    • Viewing Real-time Logs: If a container’s main process is an application that logs directly to stdout, docker attach will show you that live output, similar to the docker logs -f command.

    How to Detach from a Docker Container Safely

    When you use the docker attach command, you should understand that your terminal session becomes directly wired to the container’s primary process (PID 1). This means that keyboard signals like Ctrl-C are passed directly through to the application. If the main process within the container is a shell or an application that isn’t specifically programmed to handle this interrupt signal, it will interpret Ctrl-C as a command to terminate.

    And since a Docker container’s lifecycle is tied directly to its main process, this action will cause the process to shut down, and as a result, the container itself will stop completely. This often surprises new users, who expect to just exit the logs, but instead end up shutting down the entire application.

    Attach docker container (ssh into docker)

    To safely disconnect from an attached container without terminating it, you must use Docker’s specific escape sequence: holding the Ctrl key and pressing P, followed immediately by Q. This key combination is intercepted by the Docker client on your local machine and is not sent to the process running inside the container.

    Suggesed Read: Self-Hosting vs Cloud-Based Docker

    Copying Files in a Docker Container

    The docker cp command copies files to and from a Docker container. Before using it, though, it’s worth understanding that Docker Volumes are usually a better way to handle persistent data.

    When Not to use the docker cp Command

    A Docker Volume is a standard mechanism for decoupling the data your application generates from the container’s lifecycle. A volume is like a USB drive that can be attached to one or more containers. The biggest advantage of using volumes is that the data within a volume persists even if the container is stopped, deleted, or rebuilt. This makes it ideal for databases, application logs, user-uploaded content, and critical configuration files.

    If you need a consistent and reliable way to share files between your host machine and a container, or ensure that your data survives container restarts, you should always use volumes by mounting them when you first run the container (e.g., using the -v or --mount flag with docker run).

    When to use the docker cp Command

    While volumes are the correct solution for persistent application data, there are specific scenarios where you might need to perform a one-time, manual file transfer. This is where the docker cp command becomes an invaluable utility for ad-hoc operations.

    The docker cp command is useful in several situations, such as:

    • Quickly pulling a specific log file from a running container for analysis
    • Pushing a hotfix configuration file without rebuilding the image
    • Extracting a build artifact that was generated inside a temporary container.

    Copy from container to host:

    docker cp <container_name_or_id>:/path/to/file /path/on/host

    Copy from host to container:

    docker cp /path/on/host <container_name_or_id>:/path/to/file

    Running an “Actual SSH” Server (Not Recommended)

    While technically possible, running an SSH server inside your container is considered an anti-pattern. Docker containers are designed to be lightweight, disposable, and focused on a single process. Adding an SSH server adds unnecessary bulk and complexity.

    When Might You Actually Need It?

    • Legacy Systems: You’re containerizing a legacy application, and existing management scripts or tools rely exclusively on SSH to function.
    • Providing Sandboxed User Environments: You are using a container to give a user a sandboxed environment on a shared server, and they need to connect with a standard SSH client.

    If you must do this, you would need to:

    1. Modify your Dockerfile to install an SSH server (e.g., openssh-server).
    2. Configure the SSH server, add user accounts, and manage SSH keys.
    3. EXPOSE port 22 in the Dockerfile.
    4. Run the container, mapping a host port to the container’s port 22 (e.g., docker run -p 2222:22 …).

    Final Thoughts

    You now know the right way to SSH into a Docker container – by using Docker’s own tools like docker exec for most cases, and docker attach when you need to connect to a container’s main process. Running a full SSH server inside a container isn’t just unnecessary – it adds complexity and risks that Docker was designed to avoid.

    Mastering these commands gives you confidence in managing containers directly. But if you want to go further – scaling deployments, automating workflows, and simplifying day-to-day server management – RunCloud gives you the best of both worlds: a clean interface with the full power of the CLI underneath.

    Sign up for RunCloud today and make managing your servers and Docker environments faster, easier, and more reliable.

  • A Step-by-Step Guide to Merging Individual WordPress Sites Into a Multisite Network

    A Step-by-Step Guide to Merging Individual WordPress Sites Into a Multisite Network

    Managing multiple WordPress sites can feel like playing an endless game of dashboard hop – logging in and out, repeating the same updates, and wasting time on work that could be done once.

    If your sites are related (part of the same business, organisation, or project), there’s a better way. A WordPress Multisite network lets you run them all from a single installation, with one login, shared themes and plugins, and updates that apply across the board.

    In this guide, you’ll learn exactly how to merge your existing WordPress sites into a single multisite network. We’ll cover when multisite is the right choice (and when it isn’t), how to prepare your sites for migration, and the step-by-step process for bringing all your content, themes, and media together under one roof.

    We will also provide a detailed pre-migration checklist to prepare your sites for a smooth transition and step-by-step instructions to activate your network and migrate all your content, themes, plugins, and media files.

    Let’s get started!

    The Benefits of a Multisite Network

    Moving your individual sites into a multisite network might seem like a bit of work upfront, but the long-term benefits are definitely worth it. Here’s why it’s such a great idea:

    • Centralized Management: This is the biggest win! Instead of juggling multiple usernames and passwords, you can manage every single one of your websites from a single dashboard. With a special “Super Admin” role, you have the power to oversee everything from one convenient location.
    • Efficient Updates: We all know how important it is to keep WordPress, themes, and plugins updated. With a multisite network, you only have to perform an update once. When you update a theme or plugin, that update becomes available across all the sites in your network instantly. This saves time and ensures all your sites are secure and running the latest versions.
    • Resource Savings: Every WordPress installation takes up space on your hosting server. When you have multiple separate sites, you have multiple copies of WordPress core files. A multisite network uses just one set of these core files for all your sites, which means it uses less server space and can be more efficient to run.
    • Consistency: If you want all your sites to have a similar look and feel, then you can use Multisite Network to share themes and plugins across the network. This makes it incredibly simple to maintain a consistent brand and user experience on all of your websites.

    When Should You Not Merge Your Sites?

    While a multisite network is a fantastic tool, it’s not the perfect solution for every situation. Before you go all-in, it’s important to understand when keeping your websites separate is better.

    The most important thing to remember is that all the sites in a multisite network are fundamentally connected. They share the same core WordPress files and the same user database.

    This is why a multisite network is the perfect choice when all your websites are related to each other. For example, it’s great for a single company that needs separate sites for its different departments, office locations, or regional branches. All of these sites operate under the umbrella of one parent company.

    However, you should not use a multisite network when managing websites for two completely different companies or brands unrelated to each other. For instance, you wouldn’t want to run the website for your freelance photography business and the website for your brother’s local pizza shop on the same multisite network. Because they share a user database, it could create confusion and potential security issues. You want to keep completely separate businesses, well, separate!

    If your main goal is simply to manage multiple, unrelated sites from one convenient dashboard without having to log in and out all the time, then a multisite network isn’t the right tool for the job. You should look at our post on the “10 Best WordPress Management Tools To Easily Manage Multiple Websites” to find the perfect solution for your needs.

    While creating a multisite network is awesome, merging existing sites into it can be a bit tricky. It’s a process that requires care and attention to detail. You might run into some bumps along the way, like issues with URLs not redirecting correctly, differences in how the databases are structured, or site-specific settings that don’t initially play nicely with the network.

    It’s very common to do some manual tweaking after the main work is done, such as double-checking your website links (permalinks) or adjusting a few settings to ensure everything is compatible with the multisite setup. Don’t let this scare you, but being prepared is good!

    Additionally, your site may have some downtime, so prepare accordingly.

    Part 1: Pre-Migration Checklist

    Before you dive in, taking a few preparatory steps will save you from future headaches and make the whole process much smoother.

    • Delete Old Data: Before you pack everything up, look around your current site and see if you can tidy up anything. This is a great time to get rid of any spam comments, delete old post drafts that you’ll never use, and remove any images or media files that are no longer needed. Every piece of data on your site must be packed up, moved, and then unpacked on the new site. The less you have to move, the faster the entire merging process. Plus, it will make your backup file much smaller and easier to manage.
    • Create a Complete Backup: This is, without a doubt, the most important step. Before you change any settings, you need a complete backup of your entire website. This includes your database, all your media files, themes, and plugins. If anything goes wrong, you can restore your site to exactly how it was before you started. If you are using RunCloud, you can do this with a simple click from the RunCloud dashboard.
    • Verify Hosting Support: Not all web hosting plans are created equal. Some, especially budget-friendly shared hosting plans, may not support or allow a WordPress Multisite network. Before you begin, contact your hosting provider’s support team or check their documentation to confirm that your plan can handle a multisite installation. If you are using RunCloud, you can continue safely, as RunCloud doesn’t impose any restrictions on WordPress Multisite installations.
    • Check for Plugin and Theme Compatibility: While many plugins and themes work perfectly in a multisite network, some don’t. Take a moment to review your most essential plugins and themes to make sure they are “multisite compatible.” A quick search on the plugin or theme’s page in the WordPress repository or the developer’s website will usually give you the answer.
    • Enable Pretty Permalinks: If your website’s links look something like yourdomain.com/?p=123, it’s best to change them to a more user-friendly and SEO-friendly structure, like yourdomain.com/sample-post. These are called “pretty permalinks.” Having this structure enabled before you start can prevent link-related issues after the merge. You can find this setting in your WordPress dashboard under “Settings” -> “Permalinks.”
    • Enable Maintenance mode: It is recommended that you enable WordPress maintenance mode on your old site by executing the wp maintenance-mode activate command. This will block users from accessing your site and reduce the chances of your data getting corrupted on highly dynamic sites.
    • Deactivate All Plugins: On the individual website that you are planning to merge, it’s a smart move to deactivate all of your plugins right before you export your content. Sometimes, plugins can interfere with the export process and cause conflicts.

    Part 2: Activating Your Multisite Network

    This next part is for anyone who has not yet built a multisite network. However, if you already have a multisite network up and running, you’re ahead of the game! Feel free to jump to the next section.

    There are two main ways to create a Multisite network:

    Method 1: Creating a brand-new multisite network

    This is the perfect option if you’re starting from scratch, maybe because you’re moving to a new hosting provider or haven’t even built the main site for your network yet. The biggest advantage here is that you begin with a completely clean WordPress installation, which is a great way to ensure you don’t run into any potential conflicts from old plugins or settings.

    If you are using RunCloud, you can install a multisite network with only a few clicks from your RunCloud dashboard.

    Method 2: Converting an existing WordPress site into a multisite network

    If you already have your primary website up and running, you should follow this method. For example, if your main business website is already built and you want to add a blog or a store as separate sites within the same network, you would convert your existing site to become the “command center” of your new network.

    1. Edit Your wp-config.php File: The first step is to edit the wp-config.php file in your main WordPress folder and add the following line of code: define(‘WP_ALLOW_MULTISITE’, true);
    2. Begin the Network Setup: Once you’ve saved the change to your wp-config.php file, log in to your WordPress dashboard. A new option will have magically appeared! Navigate to Tools and then click on Network Setup to get started.
    3. Choose Your URL Structure: This is a very important step, so take a moment to think it through. WordPress will ask you to decide how the web addresses for your new sites will be formatted. You have two choices: Subdomains (which look like site1.yourdomain.com) or Subdirectories (which look like yourdomain.com/site1). This choice is permanent and difficult to change later, so pay close attention and choose the one that makes the most sense for your project’s future.
    1. Install the Network: After you’ve made your choice, simply follow the on-screen instructions provided by WordPress. It will generate two snippets of code for you to copy and paste. One snippet will go back into your wp-config.php file (the same one from Step 1), and the other will go into a file called .htaccess (a server configuration file in the same directory). Once you’ve carefully added the code and saved the files, your multisite network will be active and ready to go

    Part 3: Merging WordPress Sites

    After performing all the above steps, we are finally ready to start the merging process. You must perform the following steps for each site you want to merge into your multisite network.

    Step 1: Export Your Content

    • From the individual WordPress site you want to merge, go to “Tools” -> “Export“.
    • Select “All content” and download the XML (WXR) file. This file contains your posts, pages, comments, and other content.

    Step 2: Create a New Site in Your Network

    Next, you need to create a new site in your Multisite network. This is where you will import the data we exported in the previous step.

    • In your multisite dashboard, navigate to “My Sites” -> “Network Admin” -> “Sites”.
    • Click “Add New” and create a new, empty site for the content you are about to import.

    Step 3: Import Your Content

    • Go to the dashboard of the newly created site.
    • Navigate to “Tools” -> “Import” and run the WordPress Importer.

    On the next screen, you must upload the XML file you exported in Step 1. Depending on the size of your site, you may run into issues with max_upload_size or PHP memory limits. You might need to contact your host to temporarily increase these.

    • You will be prompted to assign the imported content to existing users or create new ones. Be sure to check the box to download and import file attachments. When you check this box, the WordPress Importer does two things:
      • It downloads the files: It reads through all your posts and pages, finds where you’ve inserted images or other media (like PDFs or audio clips), and physically downloads a copy of each file from your old, separate site to your new site’s Media Library.
      • It updates the links: After downloading the files, it automatically updates the links within your posts and pages to point to the new location of those files inside your multisite network. This ensures that all the images and media show up perfectly when you view a blog post on your new site.

    What Happens if You Don’t Check the Box?

    If you forget to check this box, only the text content of your posts and pages will be imported correctly. Your website will look like it’s full of broken images. Because the posts will still contain image links pointing back to the Media Library on your old, separate website. When you take that old site offline, all those image links will break permanently, and the images will disappear from your new site.

    Step 4: Migrate Your Themes, Plugins, and Media

    Now that you’ve successfully imported your posts and pages, you’ve brought over the “soul” of your website. The next step is to bring over its “look and feel”, i.e., your themes, plugins, etc.

    If you decided not to download and import attachments in the previous step, then you can also import them manually in this step. This is where things get a bit more technical.

    While you can upload themes and plugins through the WordPress dashboard, moving a large library of media files efficiently and correctly often requires diving into the command line. Being comfortable with basic Linux commands is a huge advantage for a smooth migration, especially when moving from one server to another.

    Migrating Your Themes and Plugins

    First, you must install all the necessary theme and plugin files on your multisite network. You can easily download new themes and plugins by navigating to “Network Admin” -> “Plugins.” Once they are installed, click on “Network Activate” to make them available for all the sites in your network.

    Installing plugins in a WordPress multisite network

    Migrating Your Media Files via The Command-Line

    Your media files (everything in your old site’s wp-content/uploads folder) must be moved to a special directory in your multisite network.

    Each network site has its unique uploads folder, located at wp-content/uploads/sites/X, where X is the unique Site ID. You can easily find the Site ID by going to your “Network Admin” > “Sites” dashboard and hovering over or clicking “Edit” on your new site; the URL will contain its ID.

    For example, in the above screenshot, the site ID is 4.

    Manually downloading and re-uploading hundreds or thousands of files is slow and prone to errors. The ideal method is to copy the files directly from your old server to the new one using the command line.

    1. Connect to Your New Server: You’ll first need to connect to your new server’s command line using SSH (Secure Shell). Your hosting provider can give you the credentials and instructions for this.
    2. Navigate to a temporary directory: Once connected, navigate to a temporary folder where you want to temporarily upload your media files. The command will look something like this:
    mkdir /tmp/myWordPressContent
    cd /tmp/myWordPressContent
    1. Pull Files from the Old Server Using rsync: Rsync is a powerful command-line tool that efficiently synchronizes or copies files between two locations. It’s fast, reliable, and perfect for this job. From inside your new site’s uploads folder, you would run a command like this:
    rsync -avz --progress username@oldserver.com:/path/to/old/site/wp-content/uploads/* .

    Let’s quickly break down that command:

    • rsync -avz --progress: This tells rsync to run in archive mode (preserves file permissions and timestamps), be verbose (show what’s happening), compress the data to speed things up, and show a progress bar.
    • username@oldserver.com:/path/to/old/site/wp-content/uploads/*: This is the source. It’s the full path to all the files (*) inside the uploads folder on your old server.
    • .: This is the destination. The single dot means “copy everything to my current directory.”

    Note: If both your old and new sites are on the same server, you don’t need to copy the files to a different folder. You can use the cd command to navigate to the /wp-content/uploads/ folder of the old site and proceed to the next step.

    Importing the Media to WordPress

    Simply copying the files onto the server isn’t enough. You’ve moved the files, but your WordPress database has no idea they exist, and they won’t appear in your Media Library. You need to tell WordPress to scan the folder and register each file.

    With WP-CLI, you can run the wp media import command. This command goes through a directory of files and properly imports each into the WordPress Media Library, creating all the necessary thumbnails along the way.

    You would run a command like this:

    wp media import --url=newsite.yourdomain.com --path=/path/to/your/multisite/ ./*

    Let’s break that down:

    • wp media import: This tells WordPress we are performing a media import operation.
    • --url=newsite.yourdomain.com: This is essential for multisite. This flag tells WP-CLI exactly which site in the network these media files belong to.
    • --path=...: This provides the full path to your multisite’s root WordPress installation, so WP-CLI knows where to find the core files.
    • ./*: This is the path of media files you want to import. The ./ means the current directory, and * means all the files in this directory.

    When you fill in all the necessary values, the final command should look like this:

    wp media import --path=/home/runcloud/webapps/app-franecki --url=https://app-franecki.corxbbfou5-yk26eoz8z479.p.temp-site.link/site2/ ./*

    Completing this final command-line step ensures that all your migrated images and files are correctly registered and will appear perfectly within your new site’s Media Library.

    Part 4: Post-Migration Checks

    The heavy lifting is done, and your site has been moved into its new home, but don’t pop the champagne just yet! To ensure a seamless transition for both you and your visitors, it’s important to run through a final checklist. These small steps will catch any potential issues and ensure your new site runs perfectly.

    • Check and Reset Your Permalinks: Sometimes, the URL structure can get a little confused after a migration. A broken link is bad for your visitors and your SEO. Fortunately, the fix is very simple: go to the dashboard of your new site, navigate to Settings > Permalinks, and without changing anything at all, just click the “Save Changes” button. This simple action forces WordPress to rebuild its link structure and fixes most common link-related issues.
    • Verify All User Roles and Permissions: You must pay close attention to this area. The standard WordPress Importer is great for content, but does not import user roles. You will need to re-assign roles manually. Go to the Users tab on your new site’s dashboard and double-check that every user has the correct role (e.g., Administrator, Editor, Author). 
    • Review Your Settings from Top to Bottom: If you performed any tweaks to your original site, they didn’t come over with the import file. You’ll need to go through your settings and configure them again. Pay special attention to:
      • Theme Options: Go into your theme’s settings panel and set up your logos, colors, fonts, and layout options.
      • Plugin Settings: Check the settings for your key plugins, like contact forms, SEO tools, and caching plugins.
      • Widgets: Your widgets will likely need to be re-added and configured. Go to Appearance > Widgets to drag and drop them back into your sidebars and footers.
    • Test Everything… and We Mean Everything!
      Put on your visitor’s hat and browse your new site thoroughly. Click through the navigation menu, read a few blog posts, and ensure all the images display correctly. Test every key functionality; submit a message through your contact form, test your search bar, and go through a test purchase process if you have a store.
    • Add Redirects from the Old Site to the New: To avoid losing your hard-earned search engine rankings and to prevent visitors from landing on a dead page, you must set up 301 redirects. A 301 redirect tells browsers and search engines that your site has moved permanently. You’ll need to redirect traffic from your old standalone site’s URL to its new address within the multisite network (e.g., from oldsite.com to yournetwork.com/newsite). This can be easily done by adding rules to your .htaccess file.

    After Action Report

    Merging your WordPress sites into a multisite network is a powerful way to streamline your workflow and efficiently manage all of your websites. While the process can have challenges and technical hurdles, careful planning and following these steps will help ensure a smooth and successful transition.

    Tired of the Command Line? Let RunCloud Handle It.

    You’re not alone if you feel overwhelmed after reading through the steps involving SSH, rsync, and WP-CLI. Managing a Linux server can be complex and time-consuming, taking you away from what you do best – running your business.

    That’s where RunCloud comes in.

    We believe server management should be simple. Our platform provides a clean, powerful control panel that makes it incredibly easy to deploy websites, manage databases, and secure your server without ever touching the command line. You can focus on growing your business and creating great content, and leave the server management to us.

    Ready to experience a faster, simpler way to manage your WordPress sites? Sign up for a 7-day free RunCloud trial today!

  • How to Send Emails From WordPress Using Your Gmail Account for FREE (Step-By-Step Guide)

    How to Send Emails From WordPress Using Your Gmail Account for FREE (Step-By-Step Guide)

    Is your WordPress site failing to send emails? Are your contact form submissions getting lost, or are users complaining they never receive password reset links?

    The default WordPress email function is somewhat unreliable, with messages landing in spam folders or never arriving.

    There are countless reasons why your website needs to send emails reliably. These automated messages are the backbone of your site’s communication, from new user registrations and e-commerce receipts to important notifications for your internal team.

    While dedicated email services are an option, they often come with a monthly fee. But what if you could fix your WordPress email problems for free?

    This is where your existing Gmail account comes in.

    Configuring your site to send emails via Gmail’s powerful SMTP server can dramatically improve deliverability without spending a dime. This method is an excellent solution for handling low-volume, essential emails.

    This guide will teach you how to set up the Check & Log Email plugin to send all your WordPress emails through your Gmail account, ensuring they reach the inbox every time.

    Let’s get started!

    Understanding Gmail SMTP Sending Limits

    It’s important to understand that a personal Gmail account is not designed for mass-mailing. Google imposes sending limits to prevent spam and reduce the server load. At the time of writing, you can send up to 2,000 emails per day when using the Gmail SMTP server. If you exceed this limit or your sending behavior appears suspicious, Google might temporarily disable your account, or your emails could be flagged as spam.

    If you plan to send a large number of emails, such as newsletters or marketing campaigns, you should consider using a dedicated transactional email service or a newsletter platform.

    How to Configure Gmail SMTP in WordPress

    Step 1: Configure an App Password in Your Google Account

    You cannot use your regular Gmail password directly in the plugin for security reasons. Instead, you need to generate an “App Password.” This is a 16-digit passcode that gives an app or device permission to access your Google Account.

    1. Go to your Google Account.
    2. Select “Security.”
    3. Under “How you sign in to Google,” select “2-Step Verification.”
    4. At the bottom of the page, select “App passwords.”
    5. Enter a name for the app (e.g., “WordPress SMTP”) and click “Generate.”
    1. Google will generate a 16-character password. Copy this password to a safe place; you will need it for the plugin configuration.

    Step 2: Install and Configure the Check & Log Email Plugin

    Now it’s time to set up the plugin in your WordPress dashboard.

    1. Install the Plugin: From your WordPress dashboard, go to “Plugins” > “Add New,” search for “Check & Log Email,” and then install and activate it.
    1. Configure SMTP Settings: Navigate to the “Check & Log Email” settings. You will need to fill in the following fields:
      • Mailer: Select “Gmail”.
      • From: Enter your Gmail address.
      • From Name: Enter the name from which your emails will be sent.
      • SMTP Host: smtp.gmail.com
      • SMTP Secure: You can choose either “SSL” or “TLS”.
      • SMTP Port: Use 465 for SSL or 587 for TLS.
      • SMTP Authentication: Select “Yes.”
      • Username: Your full Gmail address (e.g., youremail@gmail.com).
      • Password: Paste the 16-digit App Password you generated in the previous step.

    Step 3: Send a Test Email

    Once you have saved your settings, it’s time to test if everything works correctly.

    1. Go to the “Test Email” tab within the plugin’s settings.
    2. Enter a recipient email address (you can use your own).
    3. Click “Send Test Email”.

    You will receive the test email in your inbox if the configuration is correct. You can also check the “Email Log” tab in the plugin to see a record of all emails sent from your WordPress site.

    Suggested read: 10 Best Self-Hosted Email Server Platforms to Use in 2025

    Final Thoughts

    Sending WordPress emails through Gmail is a quick, free way to fix common delivery problems for low-volume needs. It works well for critical tasks like password resets, form submissions, and team notifications, without extra monthly costs.

    However, reliable email is just one part of running a stable, high-performing WordPress site. Your site’s speed, security, and uptime ultimately depend on the server it runs on – and that’s where RunCloud comes in.

    RunCloud gives you a single, easy-to-use dashboard to manage your servers and WordPress sites, no matter where they’re hosted. You can connect cloud providers like AWS, Google Cloud, DigitalOcean, and Vultr, or even manage on-premise servers. You’ll have full control over performance, security, and deployments, without spending hours on server admin.

    Take the stress out of server management.

    Start using RunCloud today and focus on building your website – while we handle the heavy lifting behind the scenes.