Raspberry pi run commands on bootAccess denied when starting systemd serviceNode.Js on raspbian not found with SudoFailed install of Python3.4.3 on Raspberry PiError when attempting to create Python GUI using Tkinter: “no display name and no $DISPLAY environment variable”Default python version and pip problemPython script does not run when called by serviceExecuting multiple scripts on startup in a particular orderRaspberry pi starting shell script at boot not working
Is it realistic that an advanced species isn't good at war?
What are the legal affects of not mentioning heirs or successors in this act?
Employer says he needs to delay payment by 3 months due to bureaucracy
How do you translate "Don't Fear the Reaper" into Latin?
How is the corresponding author on a (math) paper typically chosen?
Is It Possible to Make a Computer Virus That Acts as an Anti-virus?
How to protect my Wi-Fi password from being displayed by Android phones when sharing it with QR code?
Slow coworker receiving compliments while I receive complaints
UK PM is taking his proposal to EU but has not proposed to his own parliament - can he legally bypass the UK parliament?
What are the consequences for downstream actors of redistributing a work under a wider CC license than the copyright holder authorized?
How to deal with intolerable behavior of a subordinate?
Which collation should I use for biblical Hebrew?
Showing that two combinatorial expressions are equal
Conflict between titlesec package and scrbook class after most recent update of TeXLive2019
Fill a bowl with alphabet soup
Osmophobia should be part of migraine diagnostic criteria?
Is it possible to cross Arctic Ocean on ski/kayak undetectable now?
Delete line if next line is the same
First aid scissors confiscated by Dubai airport security
How honest to be with US immigration about uncertainty about travel plans?
Is it plausible that an interrupted Windows update can cause the motherboard to fail?
Is it reasonable to ask candidates to create a profile on Google Scholar?
Raspberry pi run commands on boot
What is the type of this light bulb?
Raspberry pi run commands on boot
Access denied when starting systemd serviceNode.Js on raspbian not found with SudoFailed install of Python3.4.3 on Raspberry PiError when attempting to create Python GUI using Tkinter: “no display name and no $DISPLAY environment variable”Default python version and pip problemPython script does not run when called by serviceExecuting multiple scripts on startup in a particular orderRaspberry pi starting shell script at boot not working
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;
I thought that running commands on raspberry pi on boot was the easiest thing in my project. But it seems that it is complex enough not to work.
I've searched a lot on the internet on a simple objective that I couldn't solve yet. All I want to do is to launch chromium normally (not in full-screen mode or any other setting). I also need to start node.js server on boot.
I've followed this website but that didn't help at all.
I kept on seeing gnome-scheduler that is a GUI application that is supposed to run commands on boot. Now this package is deprecated, but I found previous versions at launchpad that I downloaded but I know nothing about how and where to put the downloaded files in order to work.
In the convenience of what I am looking for, I made a python script that is supposed to open a URL in chromium. And the issue should be simplified if I just put the two commands :
- Run Python (Open URL in Chromium)
- Start listening on Node.js server
But after using all the methods that were stated at the above tutorial none seem to work. Maybe the problem is that when the raspberry pi is booting other services doesn't seem to load completely.
OS: Raspbian Linux
The method I am working on is SYSTEMD:
import webbrowser
import time
time.sleep(30) #To debug if latency is the problem
webbrowser.open('https://www.google.com')
print("Hey There Log File! I made it till here!")
But this python script doesn't run because when I check the log file it is empty neither anything is printed nor the browser opens why?
Edit:
Write a new Unit file sudo nano /lib/systemd/system/sample.service
Inserting code:
[Unit]
Description=My Sample Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/sample.py
[Install]
WantedBy=multi-user.target
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
The permission on the unit file needs to be set to 644 :
sudo chmod 644 /lib/systemd/system/sample.service
Now the unit file has been defined we can tell systemd to start it during the boot sequence :
sudo systemctl daemon-reload
sudo systemctl enable sample.service
Then reboot raspberry-pi.
python boot node.js
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment
|
I thought that running commands on raspberry pi on boot was the easiest thing in my project. But it seems that it is complex enough not to work.
I've searched a lot on the internet on a simple objective that I couldn't solve yet. All I want to do is to launch chromium normally (not in full-screen mode or any other setting). I also need to start node.js server on boot.
I've followed this website but that didn't help at all.
I kept on seeing gnome-scheduler that is a GUI application that is supposed to run commands on boot. Now this package is deprecated, but I found previous versions at launchpad that I downloaded but I know nothing about how and where to put the downloaded files in order to work.
In the convenience of what I am looking for, I made a python script that is supposed to open a URL in chromium. And the issue should be simplified if I just put the two commands :
- Run Python (Open URL in Chromium)
- Start listening on Node.js server
But after using all the methods that were stated at the above tutorial none seem to work. Maybe the problem is that when the raspberry pi is booting other services doesn't seem to load completely.
OS: Raspbian Linux
The method I am working on is SYSTEMD:
import webbrowser
import time
time.sleep(30) #To debug if latency is the problem
webbrowser.open('https://www.google.com')
print("Hey There Log File! I made it till here!")
But this python script doesn't run because when I check the log file it is empty neither anything is printed nor the browser opens why?
Edit:
Write a new Unit file sudo nano /lib/systemd/system/sample.service
Inserting code:
[Unit]
Description=My Sample Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/sample.py
[Install]
WantedBy=multi-user.target
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
The permission on the unit file needs to be set to 644 :
sudo chmod 644 /lib/systemd/system/sample.service
Now the unit file has been defined we can tell systemd to start it during the boot sequence :
sudo systemctl daemon-reload
sudo systemctl enable sample.service
Then reboot raspberry-pi.
python boot node.js
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
This tutorial worked well to launch scripts on startup: instructables.com/id/…
– raspberrypitime
8 hours ago
Welcome -- you need to provide more information: 1) "when I check the log file it is empty " What log file? The code you have posted prints to standard output which means it is probably discarded. 2) "The method I am working on is SYSTEMD:" Then please include the service file you created.
– goldilocks♦
5 hours ago
time.sleep(30) #To debug if latency is the problemIt will be if the program does not properly background itself; it will be killed at some point because of that.
– goldilocks♦
5 hours ago
@goldilocks The information you want me to give is the same as in the tutorial. And I usedtime.sleep(30)after realizing that the code doesn't work. But it is a good point of view. Thanks.
– Youssof H.
5 hours ago
add a comment
|
I thought that running commands on raspberry pi on boot was the easiest thing in my project. But it seems that it is complex enough not to work.
I've searched a lot on the internet on a simple objective that I couldn't solve yet. All I want to do is to launch chromium normally (not in full-screen mode or any other setting). I also need to start node.js server on boot.
I've followed this website but that didn't help at all.
I kept on seeing gnome-scheduler that is a GUI application that is supposed to run commands on boot. Now this package is deprecated, but I found previous versions at launchpad that I downloaded but I know nothing about how and where to put the downloaded files in order to work.
In the convenience of what I am looking for, I made a python script that is supposed to open a URL in chromium. And the issue should be simplified if I just put the two commands :
- Run Python (Open URL in Chromium)
- Start listening on Node.js server
But after using all the methods that were stated at the above tutorial none seem to work. Maybe the problem is that when the raspberry pi is booting other services doesn't seem to load completely.
OS: Raspbian Linux
The method I am working on is SYSTEMD:
import webbrowser
import time
time.sleep(30) #To debug if latency is the problem
webbrowser.open('https://www.google.com')
print("Hey There Log File! I made it till here!")
But this python script doesn't run because when I check the log file it is empty neither anything is printed nor the browser opens why?
Edit:
Write a new Unit file sudo nano /lib/systemd/system/sample.service
Inserting code:
[Unit]
Description=My Sample Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/sample.py
[Install]
WantedBy=multi-user.target
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
The permission on the unit file needs to be set to 644 :
sudo chmod 644 /lib/systemd/system/sample.service
Now the unit file has been defined we can tell systemd to start it during the boot sequence :
sudo systemctl daemon-reload
sudo systemctl enable sample.service
Then reboot raspberry-pi.
python boot node.js
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I thought that running commands on raspberry pi on boot was the easiest thing in my project. But it seems that it is complex enough not to work.
I've searched a lot on the internet on a simple objective that I couldn't solve yet. All I want to do is to launch chromium normally (not in full-screen mode or any other setting). I also need to start node.js server on boot.
I've followed this website but that didn't help at all.
I kept on seeing gnome-scheduler that is a GUI application that is supposed to run commands on boot. Now this package is deprecated, but I found previous versions at launchpad that I downloaded but I know nothing about how and where to put the downloaded files in order to work.
In the convenience of what I am looking for, I made a python script that is supposed to open a URL in chromium. And the issue should be simplified if I just put the two commands :
- Run Python (Open URL in Chromium)
- Start listening on Node.js server
But after using all the methods that were stated at the above tutorial none seem to work. Maybe the problem is that when the raspberry pi is booting other services doesn't seem to load completely.
OS: Raspbian Linux
The method I am working on is SYSTEMD:
import webbrowser
import time
time.sleep(30) #To debug if latency is the problem
webbrowser.open('https://www.google.com')
print("Hey There Log File! I made it till here!")
But this python script doesn't run because when I check the log file it is empty neither anything is printed nor the browser opens why?
Edit:
Write a new Unit file sudo nano /lib/systemd/system/sample.service
Inserting code:
[Unit]
Description=My Sample Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/sample.py
[Install]
WantedBy=multi-user.target
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
The permission on the unit file needs to be set to 644 :
sudo chmod 644 /lib/systemd/system/sample.service
Now the unit file has been defined we can tell systemd to start it during the boot sequence :
sudo systemctl daemon-reload
sudo systemctl enable sample.service
Then reboot raspberry-pi.
python boot node.js
python boot node.js
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 4 hours ago
Youssof H.
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 8 hours ago
Youssof H.Youssof H.
1065 bronze badges
1065 bronze badges
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Youssof H. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
This tutorial worked well to launch scripts on startup: instructables.com/id/…
– raspberrypitime
8 hours ago
Welcome -- you need to provide more information: 1) "when I check the log file it is empty " What log file? The code you have posted prints to standard output which means it is probably discarded. 2) "The method I am working on is SYSTEMD:" Then please include the service file you created.
– goldilocks♦
5 hours ago
time.sleep(30) #To debug if latency is the problemIt will be if the program does not properly background itself; it will be killed at some point because of that.
– goldilocks♦
5 hours ago
@goldilocks The information you want me to give is the same as in the tutorial. And I usedtime.sleep(30)after realizing that the code doesn't work. But it is a good point of view. Thanks.
– Youssof H.
5 hours ago
add a comment
|
This tutorial worked well to launch scripts on startup: instructables.com/id/…
– raspberrypitime
8 hours ago
Welcome -- you need to provide more information: 1) "when I check the log file it is empty " What log file? The code you have posted prints to standard output which means it is probably discarded. 2) "The method I am working on is SYSTEMD:" Then please include the service file you created.
– goldilocks♦
5 hours ago
time.sleep(30) #To debug if latency is the problemIt will be if the program does not properly background itself; it will be killed at some point because of that.
– goldilocks♦
5 hours ago
@goldilocks The information you want me to give is the same as in the tutorial. And I usedtime.sleep(30)after realizing that the code doesn't work. But it is a good point of view. Thanks.
– Youssof H.
5 hours ago
This tutorial worked well to launch scripts on startup: instructables.com/id/…
– raspberrypitime
8 hours ago
This tutorial worked well to launch scripts on startup: instructables.com/id/…
– raspberrypitime
8 hours ago
Welcome -- you need to provide more information: 1) "when I check the log file it is empty " What log file? The code you have posted prints to standard output which means it is probably discarded. 2) "The method I am working on is SYSTEMD:" Then please include the service file you created.
– goldilocks♦
5 hours ago
Welcome -- you need to provide more information: 1) "when I check the log file it is empty " What log file? The code you have posted prints to standard output which means it is probably discarded. 2) "The method I am working on is SYSTEMD:" Then please include the service file you created.
– goldilocks♦
5 hours ago
time.sleep(30) #To debug if latency is the problem It will be if the program does not properly background itself; it will be killed at some point because of that.– goldilocks♦
5 hours ago
time.sleep(30) #To debug if latency is the problem It will be if the program does not properly background itself; it will be killed at some point because of that.– goldilocks♦
5 hours ago
@goldilocks The information you want me to give is the same as in the tutorial. And I used
time.sleep(30) after realizing that the code doesn't work. But it is a good point of view. Thanks.– Youssof H.
5 hours ago
@goldilocks The information you want me to give is the same as in the tutorial. And I used
time.sleep(30) after realizing that the code doesn't work. But it is a good point of view. Thanks.– Youssof H.
5 hours ago
add a comment
|
2 Answers
2
active
oldest
votes
If you're expecting a GUI browser to open, the DISPLAY environment variable may need to be explicitly set so that the browser the webbrowser module opens knows where to show itself. Otherwise it would likely not start at all and instead crash, not finding a valid GUI. For a systemd.service, you would do this by adding the line
Environment=DISPLAY=:0
to the [Service] section of the file before the ExecStart. You may instead need to specify the XAUTHORITY environment variable, as described here due to the service running as a different user. In which case the line to add would be
Environment=XAUTHORITY=/home/pi/.Xauthority
where 'pi' is the username the startup X instance runs as.
The reason you may not be seeing the printed log statement is a crash out of the script, the webbrowser has started a command line only browser, like links, and is waiting, or the GUI has not yet started when the python script finally gets to launching the browser.
If the sole purpose of the python script is to open a browser however, I would recommend directly starting the browser instead of relying on a Python script to do that. If you are concerned about the browser starting after node.js or the GUI, systemd service dependencies can be used to ensure it starts after those two using, e.g., Wants=mynodejs.service lines, see here for more details.
The log print isn't happening because the OP used shell redirection>, 2>&1in theExecStart=command, which never invokes a shell (unless that's an explicit part of "command").
– goldilocks♦
3 hours ago
add a comment
|
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
This is wrong, although I notice there are a few raspberry pi oriented tutorials that claim it will work.
It will not work because > (and 2>&1) are POSIX shell operations, but you are not invoking this via a shell (as you would from the commandline). It's executed by systemd and all that stuff will be passed to the command (/usr/bin/python) as arguments in addition to the script path which probably causes python to exit with an error.
You need to use these directives as explained in man systemd.exec:
StandardOutput=file:/home/pi/sample.log
StandardError=file:/home/pi/sample.log
You should test this with:
sudo systemctl start sample.service
sudo systemctl status sample.service
The last command is important because the first one alone may not provide you with all the relevant information. If you do this with sample.service as is (ie., don't fix the redirects), you will probably see the python error output.
Note that if you modify the service file after using systemctl enable you should run systemctl daemon-reload. However, you can test it directly without enabling it.
add a comment
|
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("schematics", function ()
StackExchange.schematics.init();
);
, "cicuitlab");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "447"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Youssof H. is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fraspberrypi.stackexchange.com%2fquestions%2f104282%2fraspberry-pi-run-commands-on-boot%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you're expecting a GUI browser to open, the DISPLAY environment variable may need to be explicitly set so that the browser the webbrowser module opens knows where to show itself. Otherwise it would likely not start at all and instead crash, not finding a valid GUI. For a systemd.service, you would do this by adding the line
Environment=DISPLAY=:0
to the [Service] section of the file before the ExecStart. You may instead need to specify the XAUTHORITY environment variable, as described here due to the service running as a different user. In which case the line to add would be
Environment=XAUTHORITY=/home/pi/.Xauthority
where 'pi' is the username the startup X instance runs as.
The reason you may not be seeing the printed log statement is a crash out of the script, the webbrowser has started a command line only browser, like links, and is waiting, or the GUI has not yet started when the python script finally gets to launching the browser.
If the sole purpose of the python script is to open a browser however, I would recommend directly starting the browser instead of relying on a Python script to do that. If you are concerned about the browser starting after node.js or the GUI, systemd service dependencies can be used to ensure it starts after those two using, e.g., Wants=mynodejs.service lines, see here for more details.
The log print isn't happening because the OP used shell redirection>, 2>&1in theExecStart=command, which never invokes a shell (unless that's an explicit part of "command").
– goldilocks♦
3 hours ago
add a comment
|
If you're expecting a GUI browser to open, the DISPLAY environment variable may need to be explicitly set so that the browser the webbrowser module opens knows where to show itself. Otherwise it would likely not start at all and instead crash, not finding a valid GUI. For a systemd.service, you would do this by adding the line
Environment=DISPLAY=:0
to the [Service] section of the file before the ExecStart. You may instead need to specify the XAUTHORITY environment variable, as described here due to the service running as a different user. In which case the line to add would be
Environment=XAUTHORITY=/home/pi/.Xauthority
where 'pi' is the username the startup X instance runs as.
The reason you may not be seeing the printed log statement is a crash out of the script, the webbrowser has started a command line only browser, like links, and is waiting, or the GUI has not yet started when the python script finally gets to launching the browser.
If the sole purpose of the python script is to open a browser however, I would recommend directly starting the browser instead of relying on a Python script to do that. If you are concerned about the browser starting after node.js or the GUI, systemd service dependencies can be used to ensure it starts after those two using, e.g., Wants=mynodejs.service lines, see here for more details.
The log print isn't happening because the OP used shell redirection>, 2>&1in theExecStart=command, which never invokes a shell (unless that's an explicit part of "command").
– goldilocks♦
3 hours ago
add a comment
|
If you're expecting a GUI browser to open, the DISPLAY environment variable may need to be explicitly set so that the browser the webbrowser module opens knows where to show itself. Otherwise it would likely not start at all and instead crash, not finding a valid GUI. For a systemd.service, you would do this by adding the line
Environment=DISPLAY=:0
to the [Service] section of the file before the ExecStart. You may instead need to specify the XAUTHORITY environment variable, as described here due to the service running as a different user. In which case the line to add would be
Environment=XAUTHORITY=/home/pi/.Xauthority
where 'pi' is the username the startup X instance runs as.
The reason you may not be seeing the printed log statement is a crash out of the script, the webbrowser has started a command line only browser, like links, and is waiting, or the GUI has not yet started when the python script finally gets to launching the browser.
If the sole purpose of the python script is to open a browser however, I would recommend directly starting the browser instead of relying on a Python script to do that. If you are concerned about the browser starting after node.js or the GUI, systemd service dependencies can be used to ensure it starts after those two using, e.g., Wants=mynodejs.service lines, see here for more details.
If you're expecting a GUI browser to open, the DISPLAY environment variable may need to be explicitly set so that the browser the webbrowser module opens knows where to show itself. Otherwise it would likely not start at all and instead crash, not finding a valid GUI. For a systemd.service, you would do this by adding the line
Environment=DISPLAY=:0
to the [Service] section of the file before the ExecStart. You may instead need to specify the XAUTHORITY environment variable, as described here due to the service running as a different user. In which case the line to add would be
Environment=XAUTHORITY=/home/pi/.Xauthority
where 'pi' is the username the startup X instance runs as.
The reason you may not be seeing the printed log statement is a crash out of the script, the webbrowser has started a command line only browser, like links, and is waiting, or the GUI has not yet started when the python script finally gets to launching the browser.
If the sole purpose of the python script is to open a browser however, I would recommend directly starting the browser instead of relying on a Python script to do that. If you are concerned about the browser starting after node.js or the GUI, systemd service dependencies can be used to ensure it starts after those two using, e.g., Wants=mynodejs.service lines, see here for more details.
answered 7 hours ago
FredFred
3,56111 silver badges23 bronze badges
3,56111 silver badges23 bronze badges
The log print isn't happening because the OP used shell redirection>, 2>&1in theExecStart=command, which never invokes a shell (unless that's an explicit part of "command").
– goldilocks♦
3 hours ago
add a comment
|
The log print isn't happening because the OP used shell redirection>, 2>&1in theExecStart=command, which never invokes a shell (unless that's an explicit part of "command").
– goldilocks♦
3 hours ago
The log print isn't happening because the OP used shell redirection
>, 2>&1 in the ExecStart=command, which never invokes a shell (unless that's an explicit part of "command").– goldilocks♦
3 hours ago
The log print isn't happening because the OP used shell redirection
>, 2>&1 in the ExecStart=command, which never invokes a shell (unless that's an explicit part of "command").– goldilocks♦
3 hours ago
add a comment
|
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
This is wrong, although I notice there are a few raspberry pi oriented tutorials that claim it will work.
It will not work because > (and 2>&1) are POSIX shell operations, but you are not invoking this via a shell (as you would from the commandline). It's executed by systemd and all that stuff will be passed to the command (/usr/bin/python) as arguments in addition to the script path which probably causes python to exit with an error.
You need to use these directives as explained in man systemd.exec:
StandardOutput=file:/home/pi/sample.log
StandardError=file:/home/pi/sample.log
You should test this with:
sudo systemctl start sample.service
sudo systemctl status sample.service
The last command is important because the first one alone may not provide you with all the relevant information. If you do this with sample.service as is (ie., don't fix the redirects), you will probably see the python error output.
Note that if you modify the service file after using systemctl enable you should run systemctl daemon-reload. However, you can test it directly without enabling it.
add a comment
|
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
This is wrong, although I notice there are a few raspberry pi oriented tutorials that claim it will work.
It will not work because > (and 2>&1) are POSIX shell operations, but you are not invoking this via a shell (as you would from the commandline). It's executed by systemd and all that stuff will be passed to the command (/usr/bin/python) as arguments in addition to the script path which probably causes python to exit with an error.
You need to use these directives as explained in man systemd.exec:
StandardOutput=file:/home/pi/sample.log
StandardError=file:/home/pi/sample.log
You should test this with:
sudo systemctl start sample.service
sudo systemctl status sample.service
The last command is important because the first one alone may not provide you with all the relevant information. If you do this with sample.service as is (ie., don't fix the redirects), you will probably see the python error output.
Note that if you modify the service file after using systemctl enable you should run systemctl daemon-reload. However, you can test it directly without enabling it.
add a comment
|
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
This is wrong, although I notice there are a few raspberry pi oriented tutorials that claim it will work.
It will not work because > (and 2>&1) are POSIX shell operations, but you are not invoking this via a shell (as you would from the commandline). It's executed by systemd and all that stuff will be passed to the command (/usr/bin/python) as arguments in addition to the script path which probably causes python to exit with an error.
You need to use these directives as explained in man systemd.exec:
StandardOutput=file:/home/pi/sample.log
StandardError=file:/home/pi/sample.log
You should test this with:
sudo systemctl start sample.service
sudo systemctl status sample.service
The last command is important because the first one alone may not provide you with all the relevant information. If you do this with sample.service as is (ie., don't fix the redirects), you will probably see the python error output.
Note that if you modify the service file after using systemctl enable you should run systemctl daemon-reload. However, you can test it directly without enabling it.
In order to store the script’s text output in a log file, you can change the ExecStart line to:
ExecStart=/usr/bin/python /home/pi/sample.py > /home/pi/sample.log 2>&1
This is wrong, although I notice there are a few raspberry pi oriented tutorials that claim it will work.
It will not work because > (and 2>&1) are POSIX shell operations, but you are not invoking this via a shell (as you would from the commandline). It's executed by systemd and all that stuff will be passed to the command (/usr/bin/python) as arguments in addition to the script path which probably causes python to exit with an error.
You need to use these directives as explained in man systemd.exec:
StandardOutput=file:/home/pi/sample.log
StandardError=file:/home/pi/sample.log
You should test this with:
sudo systemctl start sample.service
sudo systemctl status sample.service
The last command is important because the first one alone may not provide you with all the relevant information. If you do this with sample.service as is (ie., don't fix the redirects), you will probably see the python error output.
Note that if you modify the service file after using systemctl enable you should run systemctl daemon-reload. However, you can test it directly without enabling it.
answered 4 hours ago
goldilocks♦goldilocks
46.9k11 gold badges68 silver badges184 bronze badges
46.9k11 gold badges68 silver badges184 bronze badges
add a comment
|
add a comment
|
Youssof H. is a new contributor. Be nice, and check out our Code of Conduct.
Youssof H. is a new contributor. Be nice, and check out our Code of Conduct.
Youssof H. is a new contributor. Be nice, and check out our Code of Conduct.
Youssof H. is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Raspberry Pi Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fraspberrypi.stackexchange.com%2fquestions%2f104282%2fraspberry-pi-run-commands-on-boot%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
This tutorial worked well to launch scripts on startup: instructables.com/id/…
– raspberrypitime
8 hours ago
Welcome -- you need to provide more information: 1) "when I check the log file it is empty " What log file? The code you have posted prints to standard output which means it is probably discarded. 2) "The method I am working on is SYSTEMD:" Then please include the service file you created.
– goldilocks♦
5 hours ago
time.sleep(30) #To debug if latency is the problemIt will be if the program does not properly background itself; it will be killed at some point because of that.– goldilocks♦
5 hours ago
@goldilocks The information you want me to give is the same as in the tutorial. And I used
time.sleep(30)after realizing that the code doesn't work. But it is a good point of view. Thanks.– Youssof H.
5 hours ago