Free tools Windows power users keep installed
One-click scans. No signup required.
If Puppeteer works in your terminal but fails in crontab, the scheduled job is probably running with a different user, environment, working directory, browser cache, or host setup. Start by capturing the exact error and the job’s runtime values; then fix the specific mismatch rather than adding launch flags at random.
This checklist is for Node.js browser automation on Linux and other Unix-like systems. The title alone does not identify the operating system, cron implementation, or error, so there is no single confirmed cause.
Why does Puppeteer fail in cron but work in the terminal?
A terminal session and a cron job are separate execution contexts. Cron may use a different account, a limited PATH, a different HOME, another working directory, and none of the environment variables or setup commands provided by interactive shell startup files. The Linux crontab(5) manual describes the command and environment model; exact defaults can vary with the host and cron implementation (crontab(5) manual).
That difference matters to Puppeteer because it must find Node.js, your project and its dependencies, and a usable browser. Even after Chrome starts, missing application credentials, proxy settings, or other required variables can change navigation or authentication results.
Recommended Free Tools
#1 Best Overall
- CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
- WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
- A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
1. Capture the scheduled job’s error and runtime context
First make the failure observable. Redirect both standard output and standard error to a file writable by the account that runs the job. For example, in that account’s crontab:
*/5 * * * * /absolute/path/to/run-puppeteer.sh >> /absolute/path/to/puppeteer-cron.log 2>&1
Use a log location with permissions appropriate to the job; do not make it world-readable if your script or diagnostic output could expose sensitive data. Do not print all of env into a shared log: it may contain API keys, cookies, or other secrets.
For a short diagnostic, record only the values needed to compare the scheduled run with your successful terminal run:
printf 'time=%sn' "$(date -Is 2>/dev/null || date)">
printf 'identity='; id
printf 'pwd=%sn' "$PWD"
printf 'HOME=%snPATH=%sn' "$HOME" "$PATH"
printf 'node_path=%sn' "$(command -v node 2>/dev/null || true)"
node --version 2>&1 || true
printf 'script=%sn' '/absolute/path/to/project/capture.js'
If your platform does not support date -Is, the fallback prints its normal date format. Compare the output with the same checks in the terminal session where the script succeeds. Record the exact Puppeteer error, the scheduled account, operating-system distribution, Node and Puppeteer versions, and browser path. Redact secrets before sharing the log.
2. Make the launch context explicit
Use absolute paths and set the project directory yourself. Do not assume cron will start in your project folder, find the Node version manager’s executable, or read .bashrc, .zshrc, or another interactive shell configuration file.
Rank #2
- CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
- SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
Use a wrapper script
Create a wrapper with the paths and environment your application actually needs. Replace the example paths with those reported by command -v node and your project layout:
#!/bin/sh
set -eu
cd /absolute/path/to/project
export PATH="/usr/local/bin:/usr/bin:/bin"
export HOME="/home/cronuser"
exec /absolute/path/to/node /absolute/path/to/project/capture.js
Save it as /absolute/path/to/run-puppeteer.sh, make it executable with chmod 755 /absolute/path/to/run-puppeteer.sh, and call it from crontab. If your Node installation is managed by a version manager, use the actual Node binary path for the version required by the project; do not assume the manager’s shell initialization runs under cron. Set only the environment variables the script needs, such as a proxy or application configuration value. Keep secrets in an appropriately protected mechanism rather than embedding them in a broadly readable crontab or log.
Check which shell and cron implementation your system uses before relying on implementation-specific syntax. A wrapper using /bin/sh and explicit paths avoids many shell-startup assumptions, but does not make host-specific environment defaults identical.
3. Verify Puppeteer can find its browser as the cron account
Identify which package the application uses. The distinction is important: puppeteer normally downloads a compatible Chrome for Testing browser during installation, while puppeteer-core does not download a browser and expects you to manage its path or connect to a remote browser. If package-manager install scripts were disabled, the normal download may not have happened. See the official Puppeteer installation guide.
Check the executable path and permissions
For a project using puppeteer, you can print the path Puppeteer expects from a small diagnostic script:
Rank #3
- Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
- Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
- Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
- In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
- Ultra-thin bezels: Maximize your viewing experience with thin bezels.
const puppeteer = require('puppeteer');
console.log(puppeteer.executablePath());
Run it with the same Node executable, project dependencies, user, HOME, and working directory as the scheduled job. Confirm that the reported file exists and is executable by that account. If the project uses ECMAScript modules, adapt the import to the project’s module format.
From Puppeteer v19.0.0 onward, the default browser cache is $HOME/.cache/puppeteer. If the terminal run and cron run have different HOME values—or run as different users—the scheduled process can look in a different cache and report that Chrome is missing. Puppeteer supports configuring the cache directory; see its configuration guide and troubleshooting guide.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →If the browser was not downloaded during installation, install it explicitly in the intended project and deployment context with:
npx puppeteer browsers install
Do not run the install as one account and then assume a different cron account can read its cache. For puppeteer-core, arrange a compatible browser separately and set Puppeteer’s executablePath to that browser’s actual path, or use a managed remote browser. The correct executable and permissions depend on how the host installs and deploys Chrome.
4. Follow the Chrome error before changing launch flags
Missing shared library or Chrome exits during startup
On Linux, Chrome can fail before Puppeteer opens a page if the operating system lacks a shared library. Run ldd on the actual browser executable the job uses, not a different system Chrome found in your interactive shell:
Rank #4
- CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
- SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
- MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
- KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
- INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient
ldd /absolute/path/to/chrome | grep 'not found'
If output identifies missing libraries, install the corresponding packages for your distribution and browser version, then rerun the job as its scheduled account. Puppeteer’s Debian/Ubuntu dependency list can be a useful starting point, but it is not a universal package manifest; distributions and browser versions differ. The official troubleshooting guide explains the dependency check and cautions that host-specific details can change (Puppeteer troubleshooting).
“No usable sandbox!”
This error points to Chrome’s sandbox setup or a host security policy, not automatically to a missing Node path. Investigate the host’s supported sandbox configuration and restrictions. Puppeteer recommends keeping sandboxing enabled and says: “Running without a sandbox is strongly discouraged. Consider configuring a sandbox instead.”
Do not treat --no-sandbox as a routine cron fix. It disables an important protection against untrusted web content. Only consider it for trusted content in a deployment where the security trade-off has been deliberately assessed and accepted; prefer configuring the sandbox correctly.
5. Match the error to the likely cause
| Observed symptom | What to check first |
|---|---|
node: command not found or an unexpected Node version |
Use the absolute Node binary path; verify its version under cron and add only the needed directories to PATH. |
| Module resolution or script file-not-found error | Set the project working directory, use an absolute script path, and check dependencies and file permissions for the scheduled account. |
| “Could not find Chrome” or a browser executable-path error | Check whether the project uses puppeteer or puppeteer-core, whether installation downloaded a browser, and whether cron has the expected HOME, cache, and executable path. |
Missing .so library or Chrome exits before opening a page |
Run ldd on the browser binary used by the job and install the missing distribution-specific dependencies. |
| “No usable sandbox!” | Investigate host sandbox configuration and security policy; do not disable the sandbox as a default workaround. |
| Chrome launches, but navigation or authentication differs | Check required application variables, proxy/network access, and the exact navigation error before assigning a cause. |
6. Retest the same command as the scheduled user
A successful run in your login account does not prove that the cron account can use the same files, environment, browser cache, network, or permissions. Test the wrapper itself, as the scheduled account, with the same working directory and environment values. Where available, a command such as sudo -u cronuser /absolute/path/to/run-puppeteer.sh can help, but it may not reproduce cron’s exact environment; verify the account-switching and cron tools on your host.
Once the wrapper works under the scheduled identity, schedule that wrapper and inspect its log again. Change one demonstrated cause at a time so the next error remains useful. For ongoing compatibility, consult the system requirements for the version installed in your project. The Puppeteer system-requirements page displayed version 25.12.0 with Node 22.12+ when checked on 2026-09-29; do not apply that version’s requirement automatically to older Puppeteer releases (Puppeteer system requirements).
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallBest Value
- 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
- 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
- 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
Or skip the browser setup
If your task is simply to produce a website screenshot or PDF, ScreenshotNeo can capture it through one GET request rather than requiring your cron job to manage a local Chrome installation. Its response identifies whether a request was billed and the page verdict; bot checks, blank pages, failed loads, timeouts, and cache hits are not billed. It can accept consent banners and remove known consent platforms, newsletter popups, and chat widgets before capture. An MCP server provides screenshot tools for Claude, Cursor, and other MCP clients. See the ScreenshotNeo website.
cURL example; replace the target URL and provide your API key. The ScreenshotNeo API documentation has the request details:
curl -G "https://api.screenshotneo.com/v1/shot"
-d access_key=YOUR_API_KEY
--data-urlencode url=https://stripe.com
-o shot.webp
ScreenshotNeo includes 1,000 screenshots a month on its free plan with no card; paid plans start at $5 for 3,000 screenshots. Sign up for ScreenshotNeo.
Frequently asked questions
Does cron read my shell’s .bashrc?
Do not rely on it. Cron’s execution context is distinct from an interactive shell, and startup-file behavior depends on the shell and system configuration. Put required paths and settings in a wrapper or the job configuration instead.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Should I add --no-sandbox to make Puppeteer work?
No, not as a default fix. First use the error to diagnose the host sandbox setup. Disabling the sandbox weakens protection and is strongly discouraged by Puppeteer.
Which Node.js version does Puppeteer require?
It depends on the Puppeteer version. Check the official system-requirements page for the version installed in your project rather than assuming the requirement for the current release applies to older projects.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




