PHP examples of scheduled tasks
The scheduled tasks used by the company all look like this:
*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null 2>&1*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null 2>&1
You can see that the output and standard error are redirected to an empty device. There is a certain reason for this. . I checked some information and describe it here:
1.Ssh login server<br>2. Create a new php file test.php, the code is as follows:
<?php sleep(50); echo "aaa\n"; file_put_contents("/tmp/test.txt",time());?>
3. Use the following command to execute the test.php program
$ php test.php &
to view the content of the /tmp/test.txt file as 1497613738
4. Then execute the following command again. After the command is executed, immediately use the exit command to log out
$ php test.php &
5 and then log in to the server via ssh and find that the content of the /tmp/test.txt file is still 1497613738. It means that when test.php was executed for the second time, the file_put_contents function was not executed or was not executed successfully.
6 Use strace to trace:
正常情况下的追踪: strace -p
Process 1475 attached restart_syscall(<... resuming interrupted call ...>) = 0write(1, "aaa\n", 4aaa ) = 4lstat("/tmp/test.txt", 0x7ffe792ebe90) = -1 ENOENT (No such file or directory) lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=65536, ...}) = 0open("/tmp/test.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0lseek(3, 0, SEEK_CUR) = 0write(3, "1497614186", 10) = 10close(3) = 0munmap(0x7f4840239000, 528384) = 0close(2) = 0close(1) = 0munmap(0x7f4847510000, 4096) = 0close(0) = 0munmap(0x7f4847511000, 4096) = 0sched_getaffinity(1475, 128, {ffffff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}) = 128sched_setaffinity(0, 128, {ffffff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}) = 0munmap(0x7f48404c8000, 2119936) = 0munmap(0x7f48406ce000, 2345056) = 0munmap(0x7f4840b39000, 2162536) = 0munmap(0x7f484090b000, 2282472) = 0munmap(0x7f4840d49000, 323584) = 0exit_group(0) = ? +++ exited with 0 +++[1]+ Done php test.php
<br>
Trace after exiting and logging in again:
strace -p 3881
restart_syscall(<... resuming interrupted call ...>) = 0write(1, "aaa\n", 4) = -1 EIO (Input/output error) munmap(0x7f6b7fc04000, 528384) = 0close(2) = 0close(1) = 0munmap(0x7f6b86edb000, 4096) = 0close(0) = 0munmap(0x7f6b86edc000, 4096) = 0sched_getaffinity(3881, 128, {ffffff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}) = 128sched_setaffinity(0, 128, {ffffff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}) = 0munmap(0x7f6b7fe93000, 2119936) = 0munmap(0x7f6b80099000, 2345056) = 0munmap(0x7f6b80504000, 2162536) = 0munmap(0x7f6b802d6000, 2282472) = 0munmap(0x7f6b80714000, 323584) = 0exit_group(0) = ? +++ exited with 0 +++
By comparison, you can see that there is an input/output error at the echo, and the file_put_contents function is not executed in the end.
7 Reason:
Why does an EIO error occur after logging out and then logging in again? This is related to Linux session processing. <br>When a user logs into a server via ssh, a session is started. After the session starts, standard input (stdin), standard output (stdout), and standard error (stderr) will be connected to a corresponding terminal (pty). <br>After the user logs in, any standard output will be reflected in the terminal. The file handle for standard output is 1. Therefore, echo("aaa\n") in php will cause the system call write(1, "aaa\n", 4) to be executed. aaa\n will be written in the terminal. <br>A session ends when the user logs out. At the end of the session, modify all file handles open to the terminal to be unreadable and unwritable; <br>If the user logs out and then executes write(1, "aaa\n", 4), an EIO error will be reported. Because the terminal handle is no longer writable. After an EIO error occurs, the process ends.
Solution<br>Method 1:<br>Use the redirection symbol & to redirect the standard output to the hole.
$ php test.php > /dev/null 2 >&1 & 这里的& 可以用也可以不用
Method 2: <br>Use nohup.
$ nohup php test.php &
Note:
If you are running a process and you feel that the process is still active when you log out of your account will not end, then you can use the nohup command.
This command can continue to run the corresponding process after you log out of your account/close the terminal. nohup means not to hang up (n ohang up).
Our company adopts the first method, regarding the description of /dev/null 2 >&1 &, See another article
The above is the detailed content of PHP examples of scheduled tasks. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
