Well, I do know that for a single script the question is to just put the corresponding file in directory /etc/rc.local
, right? But, what if this script depends on other files (i.e. a few scripts and a couple of text files)? What should I do in order to avoid making this certain folder a mess?
2 Answers
If by depends, you mean it uses and/or calls them, that should not matter. You can just add a line to the end of the rc.local file as a command to call the main script and it should just work.
There is an alternative to rc.local, atleast on desktop versions. You can use the Startup Applications
app to add your script to it. The difference between the two methods, other than CLI vs GUI version of adding is that rc.local scripts are run as ROOT and the startup applications as your user.
Edit
From the comments, your problem becomes clearer. It seems that the script is using relative paths to access the dependency, which I'm guessing isn't code. The working directory of the above two methods are either /root/
or /home/<user name/
, thus the dependencies dont load.
Easiest fix is to cd
to the folder before invoking the python script. Either of these should work:
- Use cd /home/..../.../ && python perdc_task.py
as the command in either of those two methods.
- If that doesnt work, make a script(.sh
should do) which calls the above command and call this script in the above 2 methods.
The more elegant way of doing it is
- Do the cd
from inside the python script by programatically determining its path
- Or Use the above path to access the dependencies by absolute path
Edit2
Ubuntu might have moved away from rc.local in favor of upstart. Try to see if using upstart as in this question works for you.
-
I would prefer the GUI version. Unfortunately it doesn't work for me. I used this command: python /home/.../.../.../perdc_task.py Any ideas? Oct 29, 2012 at 14:03
-
either of these methods should work, and yet they dont.. sounds like there might be something you are missing.. what do you mean it doesnt work? Try to write out a log to see if it is starting.. is it possible it is running but terminating or something? Oct 29, 2012 at 15:31
-
try
python /home/.../.../.../perdc_task.py > /home/<your username>/Documents/perdc_task.log
and check out if anything is written into the log file Oct 29, 2012 at 16:11 -
Thanks for your answer. However, a strange thing is happening. The above script doesn’t run unless I do CD so that the current directory is where the script is located. If I do that, everything works fine and noting is written on the log file. If I don't do that, an error message is shown in terminal, however nothing is written on the log file. Any ideas? Oct 29, 2012 at 23:19
-
I tried it but still have problems. Now the scripts are executed directly through the console (I mean, without the need of doing cd beforehand), however I face problems when I use the startup application feature of Ubuntu. Any help on that? Oct 30, 2012 at 16:29
If you have cron
enabled (which you should) there is a special @reboot
command which runs on startup. I am unsure of this works on cold boots though, but from what I can see it does.
If it works, you just write a script, plonk it in some clean and organised directory, then call it through cron
.
/etc/rc.local
is not a directory but a simple file.