What is the environment for cron?Default shell for cron issueAddition to cron is not executedRun transmission through croncron scheduler not startingCron running 2hrs earlyifconfig don't work with cronCron for Raspberry PiCron not call sh scriptRaspberry Cron don't workCron doesnt run specific .py file
Sending a photo of my bank account card to the future employer
Can a Resident Assistant Be Told to Ignore a Lawful Order?
Is there an English equivalent for "Les carottes sont cuites", while keeping the vegetable reference?
Adjusting vertical spacing in fractions?
What is the goal and toolset of philosophy?
What happens if there is no space for entry stamp in the passport for US visa?
Why does FFmpeg choose 10+20+20 ms instead of an even 16 ms for 60 fps GIF images?
If I stood next to a piece of metal heated to a million degrees, but in a perfect vacuum, would I feel hot?
What do these three diagonal lines that cross through three measures and both staves mean, and what are they called?
Interviewing with an unmentioned 9 months of sick leave taken during a job
Manually select/unselect lines before forwarding to stdout
Get back to US from Canada without passport
What "fuel more powerful than anything the West (had) in stock" put Laika in orbit aboard Sputnik 2?
When does Fisher's "go get more data" approach make sense?
More output neurons than labels?
If SWIFT is headquartered in Europe, why does the EU need to create a SWIFT alternative to be able to do transactions with Iran?
How to determine the optimal threshold to achieve the highest accuracy
What exactly is a Hadouken?
Does the Intel 8085 CPU use real memory addresses?
Why doesn't philosophy have higher standards for its arguments?
What are "full piece" and "half piece" in chess?
Can a dragon's breath weapon pass through Leomund's Tiny Hut?
What impact would a dragon the size of Asia have on the environment?
Did Voldemort kill his father before finding out about Horcruxes?
What is the environment for cron?
Default shell for cron issueAddition to cron is not executedRun transmission through croncron scheduler not startingCron running 2hrs earlyifconfig don't work with cronCron for Raspberry PiCron not call sh scriptRaspberry Cron don't workCron doesnt run specific .py file
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
When issues arise using cron to schedule events, a frequently-heard explanation is that cron runs with a different set of environment variables than a "normal" user (e.g. pi). That's all well and good, but what is the environment for the cron user? If one is to avoid errors due to an incorrect environment when using cron, it would be useful to know what that environment is.
cron
add a comment |
When issues arise using cron to schedule events, a frequently-heard explanation is that cron runs with a different set of environment variables than a "normal" user (e.g. pi). That's all well and good, but what is the environment for the cron user? If one is to avoid errors due to an incorrect environment when using cron, it would be useful to know what that environment is.
cron
add a comment |
When issues arise using cron to schedule events, a frequently-heard explanation is that cron runs with a different set of environment variables than a "normal" user (e.g. pi). That's all well and good, but what is the environment for the cron user? If one is to avoid errors due to an incorrect environment when using cron, it would be useful to know what that environment is.
cron
When issues arise using cron to schedule events, a frequently-heard explanation is that cron runs with a different set of environment variables than a "normal" user (e.g. pi). That's all well and good, but what is the environment for the cron user? If one is to avoid errors due to an incorrect environment when using cron, it would be useful to know what that environment is.
cron
cron
asked Mar 26 at 4:36
SeamusSeamus
3,5991 gold badge5 silver badges24 bronze badges
3,5991 gold badge5 silver badges24 bronze badges
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
We can ask cron to tell us what its environment is.
- Create a shell script in your home directory (
~/) as follows (or with the editor of your choice):
$ nano ~/envtst.sh
- Enter/C+P the following in the editor:
#!/bin/sh
echo "env report follows for user "$USER >> /home/pi/envtst.sh.out
env >> /home/pi/envtst.sh.out
echo "env report for user "$USER" concluded" >> /home/pi/envtst.sh.out
echo " " >> /home/pi/envtst.sh.out
- Save the file and exit the editor; then set the file permissions as executable, and open your
crontabfor editing:
$ chmod a+rx ~/envtst.sh
$ crontab -e
- Enter the following line at the bottom of your
crontab:
* * * * * /home/pi/envtst.sh >> /home/pi/envtst.sh.err 2>&1
- Save and exit your
crontab. Usetailto view the output & (hopefully) observe the environment forcron. If there's nothing in the file after a minute, view the file~/envtst.sh.errfor error messages, and adjust as required. (NOTE: If you want to clear all prior error messages after troubleshooting:$ > ~/envtst.sh.err)
crontab: installing new crontab
$ tail -f ~/envtst.sh.out
env report follows for user
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/pi
env report for user concluded
This will repeat every minute, so enter ^C to stop the tail listing, edit your crontab again to "comment out" (or delete) the line just added. Save and exit the editor.
Note in the
tailoutput above thatcronhas a rather sparse environment; only six (6) variables are used to define it. Note thePATHconsists of only two directories. This is why your crontab entry fails if, for example, you're trying to launch a Python script that resides in your home directory. Note also that the user name (aka LOGNAME iaw System V) isn'tcron- it'spi!If you're not familiar, with your own user environment, it's useful to compare it against the
cronenvironment. We'll use the same shell script to add that to the "output" file~/envtst.sh.out:
$ ~/envtst.sh
$
- To view the output, open
~/envtst.sh.outin your editor, orcat ~/envtst.sh.outto see it in your terminal. It will likely be a fairly extensive output; 30 lines of text, more or less. Note in particular the following lines (assuming you've run this as userpi) :
USER=pi
...
HOME=/home/pi
LOGNAME=pi
_=/home/pi/envtst.sh
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
...
SHELL=/bin/bash
- You'll notice numerous differences in the two environments. This will help create rational
cronjobs, and help troubleshooting when they don't behave as you'd like.
Very nice! For some reason your$USERvariable isn't set -- seeenv report for user concluded.
– Mark Smith
Mar 26 at 7:22
@MarkSmith: If you're referring to the absence of $USER in thecronenvironment, it's not that it's not set... it's just not used in the version ofcronon Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined forcronin any Raspbian distro
– Seamus
Mar 26 at 14:17
@MarkSmith: It just dawned on me the line you referenced:env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P
– Seamus
Mar 26 at 14:21
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/3.0/"u003ecc by-sa 3.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
);
);
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%2f95799%2fwhat-is-the-environment-for-cron%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
We can ask cron to tell us what its environment is.
- Create a shell script in your home directory (
~/) as follows (or with the editor of your choice):
$ nano ~/envtst.sh
- Enter/C+P the following in the editor:
#!/bin/sh
echo "env report follows for user "$USER >> /home/pi/envtst.sh.out
env >> /home/pi/envtst.sh.out
echo "env report for user "$USER" concluded" >> /home/pi/envtst.sh.out
echo " " >> /home/pi/envtst.sh.out
- Save the file and exit the editor; then set the file permissions as executable, and open your
crontabfor editing:
$ chmod a+rx ~/envtst.sh
$ crontab -e
- Enter the following line at the bottom of your
crontab:
* * * * * /home/pi/envtst.sh >> /home/pi/envtst.sh.err 2>&1
- Save and exit your
crontab. Usetailto view the output & (hopefully) observe the environment forcron. If there's nothing in the file after a minute, view the file~/envtst.sh.errfor error messages, and adjust as required. (NOTE: If you want to clear all prior error messages after troubleshooting:$ > ~/envtst.sh.err)
crontab: installing new crontab
$ tail -f ~/envtst.sh.out
env report follows for user
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/pi
env report for user concluded
This will repeat every minute, so enter ^C to stop the tail listing, edit your crontab again to "comment out" (or delete) the line just added. Save and exit the editor.
Note in the
tailoutput above thatcronhas a rather sparse environment; only six (6) variables are used to define it. Note thePATHconsists of only two directories. This is why your crontab entry fails if, for example, you're trying to launch a Python script that resides in your home directory. Note also that the user name (aka LOGNAME iaw System V) isn'tcron- it'spi!If you're not familiar, with your own user environment, it's useful to compare it against the
cronenvironment. We'll use the same shell script to add that to the "output" file~/envtst.sh.out:
$ ~/envtst.sh
$
- To view the output, open
~/envtst.sh.outin your editor, orcat ~/envtst.sh.outto see it in your terminal. It will likely be a fairly extensive output; 30 lines of text, more or less. Note in particular the following lines (assuming you've run this as userpi) :
USER=pi
...
HOME=/home/pi
LOGNAME=pi
_=/home/pi/envtst.sh
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
...
SHELL=/bin/bash
- You'll notice numerous differences in the two environments. This will help create rational
cronjobs, and help troubleshooting when they don't behave as you'd like.
Very nice! For some reason your$USERvariable isn't set -- seeenv report for user concluded.
– Mark Smith
Mar 26 at 7:22
@MarkSmith: If you're referring to the absence of $USER in thecronenvironment, it's not that it's not set... it's just not used in the version ofcronon Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined forcronin any Raspbian distro
– Seamus
Mar 26 at 14:17
@MarkSmith: It just dawned on me the line you referenced:env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P
– Seamus
Mar 26 at 14:21
add a comment |
We can ask cron to tell us what its environment is.
- Create a shell script in your home directory (
~/) as follows (or with the editor of your choice):
$ nano ~/envtst.sh
- Enter/C+P the following in the editor:
#!/bin/sh
echo "env report follows for user "$USER >> /home/pi/envtst.sh.out
env >> /home/pi/envtst.sh.out
echo "env report for user "$USER" concluded" >> /home/pi/envtst.sh.out
echo " " >> /home/pi/envtst.sh.out
- Save the file and exit the editor; then set the file permissions as executable, and open your
crontabfor editing:
$ chmod a+rx ~/envtst.sh
$ crontab -e
- Enter the following line at the bottom of your
crontab:
* * * * * /home/pi/envtst.sh >> /home/pi/envtst.sh.err 2>&1
- Save and exit your
crontab. Usetailto view the output & (hopefully) observe the environment forcron. If there's nothing in the file after a minute, view the file~/envtst.sh.errfor error messages, and adjust as required. (NOTE: If you want to clear all prior error messages after troubleshooting:$ > ~/envtst.sh.err)
crontab: installing new crontab
$ tail -f ~/envtst.sh.out
env report follows for user
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/pi
env report for user concluded
This will repeat every minute, so enter ^C to stop the tail listing, edit your crontab again to "comment out" (or delete) the line just added. Save and exit the editor.
Note in the
tailoutput above thatcronhas a rather sparse environment; only six (6) variables are used to define it. Note thePATHconsists of only two directories. This is why your crontab entry fails if, for example, you're trying to launch a Python script that resides in your home directory. Note also that the user name (aka LOGNAME iaw System V) isn'tcron- it'spi!If you're not familiar, with your own user environment, it's useful to compare it against the
cronenvironment. We'll use the same shell script to add that to the "output" file~/envtst.sh.out:
$ ~/envtst.sh
$
- To view the output, open
~/envtst.sh.outin your editor, orcat ~/envtst.sh.outto see it in your terminal. It will likely be a fairly extensive output; 30 lines of text, more or less. Note in particular the following lines (assuming you've run this as userpi) :
USER=pi
...
HOME=/home/pi
LOGNAME=pi
_=/home/pi/envtst.sh
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
...
SHELL=/bin/bash
- You'll notice numerous differences in the two environments. This will help create rational
cronjobs, and help troubleshooting when they don't behave as you'd like.
Very nice! For some reason your$USERvariable isn't set -- seeenv report for user concluded.
– Mark Smith
Mar 26 at 7:22
@MarkSmith: If you're referring to the absence of $USER in thecronenvironment, it's not that it's not set... it's just not used in the version ofcronon Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined forcronin any Raspbian distro
– Seamus
Mar 26 at 14:17
@MarkSmith: It just dawned on me the line you referenced:env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P
– Seamus
Mar 26 at 14:21
add a comment |
We can ask cron to tell us what its environment is.
- Create a shell script in your home directory (
~/) as follows (or with the editor of your choice):
$ nano ~/envtst.sh
- Enter/C+P the following in the editor:
#!/bin/sh
echo "env report follows for user "$USER >> /home/pi/envtst.sh.out
env >> /home/pi/envtst.sh.out
echo "env report for user "$USER" concluded" >> /home/pi/envtst.sh.out
echo " " >> /home/pi/envtst.sh.out
- Save the file and exit the editor; then set the file permissions as executable, and open your
crontabfor editing:
$ chmod a+rx ~/envtst.sh
$ crontab -e
- Enter the following line at the bottom of your
crontab:
* * * * * /home/pi/envtst.sh >> /home/pi/envtst.sh.err 2>&1
- Save and exit your
crontab. Usetailto view the output & (hopefully) observe the environment forcron. If there's nothing in the file after a minute, view the file~/envtst.sh.errfor error messages, and adjust as required. (NOTE: If you want to clear all prior error messages after troubleshooting:$ > ~/envtst.sh.err)
crontab: installing new crontab
$ tail -f ~/envtst.sh.out
env report follows for user
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/pi
env report for user concluded
This will repeat every minute, so enter ^C to stop the tail listing, edit your crontab again to "comment out" (or delete) the line just added. Save and exit the editor.
Note in the
tailoutput above thatcronhas a rather sparse environment; only six (6) variables are used to define it. Note thePATHconsists of only two directories. This is why your crontab entry fails if, for example, you're trying to launch a Python script that resides in your home directory. Note also that the user name (aka LOGNAME iaw System V) isn'tcron- it'spi!If you're not familiar, with your own user environment, it's useful to compare it against the
cronenvironment. We'll use the same shell script to add that to the "output" file~/envtst.sh.out:
$ ~/envtst.sh
$
- To view the output, open
~/envtst.sh.outin your editor, orcat ~/envtst.sh.outto see it in your terminal. It will likely be a fairly extensive output; 30 lines of text, more or less. Note in particular the following lines (assuming you've run this as userpi) :
USER=pi
...
HOME=/home/pi
LOGNAME=pi
_=/home/pi/envtst.sh
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
...
SHELL=/bin/bash
- You'll notice numerous differences in the two environments. This will help create rational
cronjobs, and help troubleshooting when they don't behave as you'd like.
We can ask cron to tell us what its environment is.
- Create a shell script in your home directory (
~/) as follows (or with the editor of your choice):
$ nano ~/envtst.sh
- Enter/C+P the following in the editor:
#!/bin/sh
echo "env report follows for user "$USER >> /home/pi/envtst.sh.out
env >> /home/pi/envtst.sh.out
echo "env report for user "$USER" concluded" >> /home/pi/envtst.sh.out
echo " " >> /home/pi/envtst.sh.out
- Save the file and exit the editor; then set the file permissions as executable, and open your
crontabfor editing:
$ chmod a+rx ~/envtst.sh
$ crontab -e
- Enter the following line at the bottom of your
crontab:
* * * * * /home/pi/envtst.sh >> /home/pi/envtst.sh.err 2>&1
- Save and exit your
crontab. Usetailto view the output & (hopefully) observe the environment forcron. If there's nothing in the file after a minute, view the file~/envtst.sh.errfor error messages, and adjust as required. (NOTE: If you want to clear all prior error messages after troubleshooting:$ > ~/envtst.sh.err)
crontab: installing new crontab
$ tail -f ~/envtst.sh.out
env report follows for user
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/pi
env report for user concluded
This will repeat every minute, so enter ^C to stop the tail listing, edit your crontab again to "comment out" (or delete) the line just added. Save and exit the editor.
Note in the
tailoutput above thatcronhas a rather sparse environment; only six (6) variables are used to define it. Note thePATHconsists of only two directories. This is why your crontab entry fails if, for example, you're trying to launch a Python script that resides in your home directory. Note also that the user name (aka LOGNAME iaw System V) isn'tcron- it'spi!If you're not familiar, with your own user environment, it's useful to compare it against the
cronenvironment. We'll use the same shell script to add that to the "output" file~/envtst.sh.out:
$ ~/envtst.sh
$
- To view the output, open
~/envtst.sh.outin your editor, orcat ~/envtst.sh.outto see it in your terminal. It will likely be a fairly extensive output; 30 lines of text, more or less. Note in particular the following lines (assuming you've run this as userpi) :
USER=pi
...
HOME=/home/pi
LOGNAME=pi
_=/home/pi/envtst.sh
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
...
SHELL=/bin/bash
- You'll notice numerous differences in the two environments. This will help create rational
cronjobs, and help troubleshooting when they don't behave as you'd like.
edited Mar 26 at 4:42
answered Mar 26 at 4:36
SeamusSeamus
3,5991 gold badge5 silver badges24 bronze badges
3,5991 gold badge5 silver badges24 bronze badges
Very nice! For some reason your$USERvariable isn't set -- seeenv report for user concluded.
– Mark Smith
Mar 26 at 7:22
@MarkSmith: If you're referring to the absence of $USER in thecronenvironment, it's not that it's not set... it's just not used in the version ofcronon Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined forcronin any Raspbian distro
– Seamus
Mar 26 at 14:17
@MarkSmith: It just dawned on me the line you referenced:env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P
– Seamus
Mar 26 at 14:21
add a comment |
Very nice! For some reason your$USERvariable isn't set -- seeenv report for user concluded.
– Mark Smith
Mar 26 at 7:22
@MarkSmith: If you're referring to the absence of $USER in thecronenvironment, it's not that it's not set... it's just not used in the version ofcronon Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined forcronin any Raspbian distro
– Seamus
Mar 26 at 14:17
@MarkSmith: It just dawned on me the line you referenced:env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P
– Seamus
Mar 26 at 14:21
Very nice! For some reason your
$USER variable isn't set -- see env report for user concluded.– Mark Smith
Mar 26 at 7:22
Very nice! For some reason your
$USER variable isn't set -- see env report for user concluded.– Mark Smith
Mar 26 at 7:22
@MarkSmith: If you're referring to the absence of $USER in the
cron environment, it's not that it's not set... it's just not used in the version of cron on Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined for cron in any Raspbian distro– Seamus
Mar 26 at 14:17
@MarkSmith: If you're referring to the absence of $USER in the
cron environment, it's not that it's not set... it's just not used in the version of cron on Raspbian (and Debian I think). Here's some more on that, and still more, and more. Likely more to this story, but I don't think $USER defined for cron in any Raspbian distro– Seamus
Mar 26 at 14:17
@MarkSmith: It just dawned on me the line you referenced:
env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P– Seamus
Mar 26 at 14:21
@MarkSmith: It just dawned on me the line you referenced:
env report for user concluded. Yeah... :) I stuck that in the script to emphasize that $USER isn't defined :P– Seamus
Mar 26 at 14:21
add a comment |
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%2f95799%2fwhat-is-the-environment-for-cron%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