Cleyton Bonamigo
Cleyton Bonamigo

Reputation: 51

Run screen and command crontab

I'm trying to add a new crontab that open a screen window and execute php command inside this window.

What I'm trying:

sudo crontab -e
10 0 * * * * screen -d -m php /var/www/script.php

This doesn't create a screen, but, if I remove after -m, creates normal. This code returns that I have to run on a terminal

10 0 * * * * screen -d

How can I do this? It's possible?

Thanks.

Edit

Figured out. What I had to do is send some commands to attached screen, like this:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015' emulates pressing the Enter key.

It was mentioned here: https://superuser.com/a/274071

Upvotes: 2

Views: 10579

Answers (1)

Thomas Dickey
Thomas Dickey

Reputation: 54495

A similar question was asked in How do I use crontab to start a screen session?

In cron, you do not have a terminal (see for example Linux: Difference between /dev/console , /dev/tty and /dev/tty0). screen wants to run in a terminal. Getting it to run in that situation requires special handling.

According to its documentation, the combination of -d and -m options is treated specially:

-d -m

Start screen in "detached" mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts.

In your example,

php /var/www/script.php

is a command to be run. It may rely upon environment variables to be set to make it run properly (for instance a particular PATH). The accepted answer in the other question shows how one might source the shell initialization (.profile) for example, to set the environment. Your shell might use .bash_profile, etc., but the principle is the same.

Upvotes: 1

Related Questions